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

相关问题