没有收到UINavigationBarDelegate回调

时间:2012-06-25 15:23:11

标签: 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在接口中是否符合此协议。

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

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

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

1 个答案:

答案 0 :(得分:5)

我将把这个留给将来会遇到这个问题的人:

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

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