app里经常有这种情况,点击button1,push AController,点击button2,push BController。当两个按钮一起点的时候,navigationController会接连push A、BController,在iOS8以下的版本中,按返回就会崩溃。这种情况的解决方法很简单,分别给button1,button2设置button.exclusiveTouch = YES;
就行
setExclusiveTouch
是UIView的一个方法,所有继承UIView的子类都可以使用这个方法,可是很不幸的,UIBarButtonItem不在此列,它继承自NSObject。
当导航栏上的按钮使用- (instancetype)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;
这个方法创建时,它不可以使用setExclusiveTouch
这个方法。
解决方法有很多:
- 在实例完成之后,添加如下代码:
for(UIView *temp in self.navigationController.navigationBar.subviews)
{
[temp setExclusiveTouch:YES];
}
将navigationBar上的所有view设置成独自响应。
- 重写NavigationBar,并在navigationBar里设置如下:
-(void)layoutSubviews {
[super layoutSubviews];
for (UIView *view in self.subviews) {
view.exclusiveTouch = YES;
}
}