4

有没有办法解决没有收到 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 消息,说我的课程符合要求,但我没有收到回调。由于它在测试项目中有效,但在这里不起作用,我正在尝试找出解决此问题的其他方法。有什么想法吗?谢谢。

4

1 回答 1

5

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

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

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

于 2013-12-24T09:40:34.757 回答