实现思路:
重写 SDK 设置导航栏按钮的方法,在方法中做出判断,根据条件来设置自己的导航栏按钮。
实现代码:
========
1.由于设置导航栏按钮需要在主线程,可以使用下面的宏:
#define rcd_dispatch_main_async_safe(block) if ([NSThread isMainThread]) { block(); } else { dispatch_async(dispatch_get_main_queue(), block);}
2. 重写方法,做出判断,分别创建 setLeftNavigationItem 和 setRightNavigationItem 方法,在对应的方法设置导航栏按钮即可:
- (void)notifyUpdateUnreadMessageCount {
if (self.allowsMessageCellSelection) {
[super notifyUpdateUnreadMessageCount];
return;
}
[self __setNavigationItems];
}
3.实现自定义左右导航栏的方法
- (void)__setNavigationItems {
rcd_dispatch_main_async_safe(^{
//设置导航栏左边按钮的方法
[self setLeftNavigationItem];
//设置导航栏右边边按钮的方法
[self setRightNavigationItem];
});
}
4.在 ViewDidLoad 中调用自定义导航栏方法
- (void)viewDidLoad {
[super viewDidLoad];
[self __setNavigationItems];
}