[关闭]
@FoxBabe 2014-07-31T09:39:02.000000Z 字数 968 阅读 3140

处理一个视图上多个按钮同时触发的问题

UIButton 同时触发


现象描述

在一个UIView视图上,存在多个button按钮,点击按钮触发不同的事件,但是当多个手指同时点击时,例如每个页面进入不同的控制器,那么看到的现场则是,从显示的控制器点击返回,出现黑屏或程序奔溃,即事件错乱调用造成这种现象。

解决方法

之前有通过设置变量的方法来进行控制,例如已经点击按钮触发了某件事件,则修改变量标识,等返回后再将变量进行还原。但是这种很大的一个弊端为:当同一个页面上按钮较多时,这里处理起来的逻辑就很繁琐了。

比较完美的解决方法为:设置button的exclusiveTouch属性为YES,系统默认为NO。这个属性的大致意思为:是否接收处理唯一的触摸或点击事件。设置为YES后,在同一个window上,多个按钮进行操作的时候,只会优先触发第一个事件。

下面是苹果官方的解释:
A Boolean value that indicates whether the receiver handles touch events exclusively.
Setting this property to YES causes the receiver to block the delivery of touch events to other views in the same window. The default value of this property is NO.

多个按钮,代码设置如下:
  1. //将多个按钮的exclusiveTouch均设置为YES
  2. [self.agentBtn setExclusiveTouch:YES];
  3. [self.stationBtn setExclusiveTouch:YES];
  4. [self.photoBtn setExclusiveTouch:YES];
  5. [self.practicalBtn setExclusiveTouch:YES];
  6. [self.newsBtn setExclusiveTouch:YES];
  7. [self.messageBtn setExclusiveTouch:YES];
  8. [self.trustlineBtn setExclusiveTouch:YES];
  9. [self.moreBtn setExclusiveTouch:YES];
这样,就能比较好的处理一个视图上多个按钮同时触发造成的各种奇葩问题了。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注