【TIP】按钮事件同时触发的解决办法

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现cl...
    以德扶人阅读 2,431评论 2 50
  • 1、设置UILabel行间距 NSMutableAttributedString* attrString = [[...
    十年一品温如言1008阅读 1,694评论 0 3
  • { 11、核心动画 需要签协议,但是系统帮签好 一、CABasicAnimation 1、创建基础动画对象 CAB...
    CYC666阅读 1,589评论 2 4
  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,142评论 1 6
  • 作为一个效率低,闲的要死的,身体又不好的人,周一到周五的生活都是到公司打卡,争取不迟到。周一到周四学习晨会一般到9...
    飯盒阅读 581评论 0 0