UINavigationController子类 – 自定义Pop

像许多其他人一样,我想在UINavigationController中使用“后退”button时执行一个操作。 我知道一些替代方法,例如添加我自己的button,并尝试欺骗的外观,使用viewWillDisappear和设置标签的所有非回操作,将导致视图消失,等等。

但是我想尝试的是inheritanceUINavigationController并在popViewControllerAnimated中注入一些东西:

但是我无法得到一个简单的testing用例。 这是我试过的…

我创build了一个新的类,CustomNavigationController,从UINavigationControllerinheritance。 在这里,我更新了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 

在界面生成器中,我更改了导航控制器的类: 在这里输入图像说明

我错过了什么? 我期待“popup”被logging,每当我popup此导航控制器中的任何视图。

我刚刚在iPhone 5.1模拟器上testing了相同的实现,它工作正常 – 看来问题在别的地方。

我已经从单视图应用程序模板创build了一个空项目,并将CustomNavigationController类添加到您在问题主体中发布的代码中。 一个UIButton用于将另一个视图控制器推到导航堆栈(使用storyboard的segue),并按照预期在控制台中发布“POP”消息。

在这里输入图像说明

从UINavigationController的文档的第一段。

UINavigationController类实现了pipe理分层内容导航的专用视图控制器。 这个类不适用于子类。 相反,如果您希望应用程序的用户界面能够反映内容的层次性,则可以使用它的实例。

如果你想要这种定制,你最好实现自己的导航风格控制器。