有没有办法解决未收到 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/