有没有办法解决没有收到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消息说我的班级符合,但我没有得到回调。因为它在测试项目中工作,并且它在这里不起作用,我试图找出解决这个问题的其他方法。有什么想法吗?感谢。
答案 0 :(得分:5)
我将把这个留给将来会遇到这个问题的人:
您需要将这些<UINavigationBarDelegate> protocol methods
放在导航控制器的类中,而不是放在您正在处理的视图控制器类中。
在我的情况下,我只有一个类NavigationController(UINavigationController的子类),其单例实例:sharedNavigationController
适用于我的整个应用程序。我已将其设置为符合<UINavigationBarDelegate> protocol
并在其中声明了这些方法。从那时起,一切正常。