最近在项目中遇到一个特别奇怪的问题,经过一上午加一中午的排查,终于定位了问题。这个过程很曲折,有必要记录一下。
问题描述:在6s以及6sp上,无论是自己添加的button还是navigationBarItem,经常出现点击无效的问题,但是在其他机型以及6s/6sp的模拟器上都没有这个问题。
转机一:我在测试的时候发现,我在触碰到按钮时候,过大概0.1s,按钮选中状态下的灰色背景就消失了,但是在5s上只要不松手,灰色背景就不会消失。
猜测:难道和压力屏的设置有关,因为6s才有的压力屏,之前确实没有注意过这方面的开发设置。
结果:谷歌一上午,没有查到任何类似的问题。
转机二:在6s模拟器上测试的时候,我反复点击按钮触发点击事件,每次都成功。然后我试了试按住按钮不动,按钮依然是灰色,然后我挪动了一下鼠标,bug出现了,灰色背景消失了。
猜测:手势的滑动屏蔽掉了点击事件。
实验:这个屏蔽很奇怪,于是我打开了以前的项目,发现并没有出现同样的问题,及时按住按钮后移动鼠标也能触发点击事件。这个时候发现项目中有一个UIButton+NMCategory的文件,这个是其他同学使用的,让按钮可以随手势移动,然后所有的UIButton全部都添加函数,只要一移动,立马失焦。这段坑爹的代码如下:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
self.highlighted = NO;
}
结果:原来是用第三方的问题,改了之后就可以了。
总结:
1)6s屏幕的手势识别比5s灵敏好多;
2)慎用第三方Category,用之前必须得过一遍代码,不然神坑;