1

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

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

但我无法让一个简单的测试用例工作。这是我尝试过的...

我创建了一个新类 CustomNavigationController,它继承自 UINavigationController。在这里,我更新了 popViewControllerAnimated:

。H:

#import <UIKit/UIKit.h>

@interface CustomNavigationController : UINavigationController

@end

米:

#import "CustomNavigationController.h"

@interface CustomNavigationController ()

@end

@implementation CustomNavigationController

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

@end

在界面生成器中,我更改了导航控制器的类: 在此处输入图像描述

我错过了什么?每当我在此导航控制器中弹出任何视图时,我都希望记录“弹出”。

4

2 回答 2

1

从UINavigationController文档的第一段开始。

UINavigationController 类实现了一个专门的视图控制器来管理分层内容的导航。此类不用于子类化。相反,在您希望应用程序的用户界面反映内容的分层性质的情况下,您可以按原样使用它的实例。

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

于 2012-04-11T16:22:46.963 回答
1

我刚刚在 iPhone 5.1 模拟器上测试了相同的实现,它工作正常 - 似乎问题出在其他地方。

我从单视图应用程序模板创建了一个空项目,并使用您在问题正文中发布的代码添加了 CustomNavigationController 类。UIButton 用于将另一个视图控制器推送到导航堆栈(使用情节提要的 segue),并且“POP”消息按预期发布在控制台中。

在此处输入图像描述

于 2012-04-11T17:23:08.027 回答