没有收到UINavigationBarDelegate回调

Cry*_*tal 4 iphone protocols

有没有办法解决不接收NavBarDelegate回调的问题?我在测试项目中尝试过:

[self.navigationController.navigationBar setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

在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__);
}
Run Code Online (Sandbox Code Playgroud)

我确实检查了我的ViewController在接口中是否符合此协议.

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

if ([self conformsToProtocol:@protocol(UINavigationBarDelegate)]) {
        NSLog(@"yes I conform");
    }
Run Code Online (Sandbox Code Playgroud)

我确实得到了NSLog消息,说我的班级符合,但我没有得到回调.因为它在测试项目中工作,并且它在这里不起作用,我试图找出解决这个问题的其他方法.有什么想法吗?谢谢.

Sta*_*ich 5

我将离开这个将来遇到这个问题的人:

您需要将它们<UINavigationBarDelegate> protocol methods放在导航控制器的类中,而不是放在您正在处理的视图控制器类中.

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