2
在導航控制器應用程序中,假設您已經爲根控制器分配了標題,則推送的視圖將在導航欄的左上角有一個帶有該標題的後退按鈕。這是自動的。我如何根據後退按鈕的點擊事件來執行代碼?在導航控制器中捕獲點擊
在導航控制器應用程序中,假設您已經爲根控制器分配了標題,則推送的視圖將在導航欄的左上角有一個帶有該標題的後退按鈕。這是自動的。我如何根據後退按鈕的點擊事件來執行代碼?在導航控制器中捕獲點擊
實施UINavigationControllerDelegate
@protocol UINavigationControllerDelegate <NSObject>
@optional
// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
@end
編輯: 例如,對於一個簡單的兩個層次結構,但可以很容易地更新,以更)
讓你的根視圖控制器UINavigationController
委託(例如,在viewDidLoad
)和然後執行如下:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (viewController == self)
{
if (lastView == theOtherView)
{
// Pop from other view to root view
}
}
else if (viewController == theOtherView)
{
// push to other view
}
lastView = viewController;
}
對,但如果根控制器有兩條路徑超出它 - 一個是從根控制器tableview推push view1,另一個是通過信息圖標push view2,如何知道回到根控制器時我來自哪個視圖? – 4thSpace 2010-01-08 16:32:53
已更新。將viewController param作爲屬性lastView存儲在委託類上並進行比較。使用UINavigationController屬性topViewController&visibleViewController會更好,但不幸的是,它們似乎已在這兩個委託方法被調用之前已被更新:( – cidered 2010-01-08 18:56:00
這不僅捕獲後點擊,而且代碼完成彈出。 – 2013-04-25 19:42:58