2010-01-08 46 views
2

在導航控制器應用程序中,假設您已經爲根控制器分配了標題,則推送的視圖將在導航欄的左上角有一個帶有該標題的後退按鈕。這是自動的。我如何根據後退按鈕的點擊事件來執行代碼?在導航控制器中捕獲點擊

回答

4

實施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; 
} 
+0

對,但如果根控制器有兩條路徑超出它 - 一個是從根控制器tableview推push view1,另一個是通過信息圖標push view2,如何知道回到根控制器時我來自哪個視圖? – 4thSpace 2010-01-08 16:32:53

+0

已更新。將viewController param作爲屬性lastView存儲在委託類上並進行比較。使用UINavigationController屬性topViewController&visibleViewController會更好,但不幸的是,它們似乎已在這兩個委託方法被調用之前已被更新:( – cidered 2010-01-08 18:56:00

+0

這不僅捕獲後點擊,而且代碼完成彈出。 – 2013-04-25 19:42:58

相關問題