1

與其他許多人一樣,我想在UINavigationController中使用「後退」按鈕時執行操作。我知道一些替代方法,例如添加我自己的按鈕並嘗試欺騙外觀,使用viewWillDisappear並在所有非後退操作上設置標籤,以使視圖消失等。UINavigationController子類 - 自定義Pop

但是我想嘗試的是繼承UINavigationController並在popViewControllerAnimated中注入一些東西:

但我無法獲得簡單的測試用例。這是我試過的...

我創建了一個新類CustomNavigationController,它繼承自UINavigationController。在這裏,我更新popViewControllerAnimated:

.H:

#import <UIKit/UIKit.h> 

@interface CustomNavigationController : UINavigationController 

@end 

.M:

#import "CustomNavigationController.h" 

@interface CustomNavigationController() 

@end 

@implementation CustomNavigationController 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated{ 
    NSLog(@"pop!"); 
    return [super popViewControllerAnimated:animated]; 
} 

@end 

在Interface Builder中,我改變了類導航控制器: enter image description here

我錯過了什麼?我希望每當我在這個導航控制器中彈出任何視圖時都會記錄'pop'。

回答

1

我剛剛在iPhone 5.1模擬器上測試了相同的實現,它工作正常 - 看起來問題在別的地方。

我已經從單視圖應用程序模板創建了一個空項目,並將CustomNavigationController類添加到您在問題主體中發佈的代碼中。 UIButton用於將另一個視圖控制器推送到導航堆棧(使用storyboard的segue),並按預期在控制檯中發佈'POP'消息。

enter image description here

+0

謝謝 - 我剛剛在一個測試項目中也證實了這一點。我會盡力在其他地方追蹤它 – 2012-04-11 18:01:29

1

從文檔的第一段UINavigationController

UINavigationController類實現了一個專門的視圖 控制器,管理分層內容的導航。這個 類不適用於子類。相反,如果您希望應用程序的用戶界面能夠反映內容的分層特性,則可以使用它的實例 。

如果你想要這種定製,你最好實現自己的導航風格控制器。

+0

我也讀過這個。我現在只是在試驗。無論如何,「無意」讓我覺得這是一個軟性警告,而不是禁止。它不會說'你不應該因爲...'。 我也認爲我自己的導航風格控制器只是爲了記錄'流行'可能是矯枉過正(翻譯:不知道從哪裏開始)。 – 2012-04-11 16:55:17

+4

有關UINavigationController的Apple文檔現在聲明:「此類通常按原樣使用,但可能會在iOS 6及更高版本中進行分類。」 – 2013-06-23 13:35:17

相關問題