iphone - 未收到 UINavigationBarDelegate 回调

标签 iphone protocols

有没有办法解决未收到 NavBarDelegate 回调的问题?我尝试在一个测试项目中这样做:

[self.navigationController.navigationBar setDelegate:self];

在 viewDidLoad 中,我确实收到了以下回调:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {
    NSLog(@"%s", __FUNCTION__);
    return YES;
}
- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item {
    NSLog(@"%s", __FUNCTION__);    
}

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    NSLog(@"%s", __FUNCTION__);
    return YES;
}
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {
    NSLog(@"%s", __FUNCTION__);
}

我确实在界面中检查了我的 ViewController 是否符合此协议(protocol)。

在 viewWillAppear: 中,我检查我的类是否符合协议(protocol):

if ([self conformsToProtocol:@protocol(UINavigationBarDelegate)]) {
        NSLog(@"yes I conform");
    }

我确实收到了 NSLog 消息,说明我的类符合要求,但我没有收到回调。由于它在测试项目中有效,但在这里不起作用,我正在尝试找出其他方法来解决此问题。有什么想法吗?谢谢。

最佳答案

我将这个留给将来遇到此问题的任何人:

您需要放置这些 <UINavigationBarDelegate> protocol methods在您的导航 Controller 的类中,而不是在您正在处理的 View Controller 的类中。

就我而言,我只有一个类 NavigationController (UINavigationController 的子类),其单例实例: sharedNavigationController适用于我的整个应用程序。我已将其设置为符合 <UINavigationBarDelegate> protocol并在其中声明了这些方法。从那时起一切工作正常。

关于iphone - 未收到 UINavigationBarDelegate 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192243/

相关文章:

+40k 记录的 iphone sdk sqlite 查找性能

iphone - 更新后导航栏标题显示在后退按钮项上

iPhone GPS 开发 - 提示 + 技巧

iphone - 重置警报的推送通知设置

ios - 在 Swift 中将协议(protocol)类型作为参数传递

iphone - iOS : NSDateFormatter memory leak/viewDidUnload

google-chrome - 从网站启动 Chrome 打包的 Web 应用程序

ios - 如何从父 UIViewController 调用容器中嵌入的 UIViewController 中的方法?

swift - 通用完成作为非通用通过

iphone - Cocoa Touch 序列化对象。解码后尝试读取自定义类的数据成员会导致程序崩溃