在最近的开发工作中, view上写了一个button, 但是点击总是没有响应事件很是苦恼, 虽然最后的解决方案非常简单, 看起来自己就和傻子一样, 但是再没有找到问题之前, 这个就是一个难题, 所以将这一次的寻找bug的过程给记录下来, 给以后的自己看看, 找bug从最简单的地方找起, 不要想着这里不可能有问题之类的, 有这种想法的话, 那么bug很有可能就在你瞧不起的最简单的地方.
1. 检查userInterfaractionEnabled
检查父视图的userInterfaractionEnabled是否打开, 众所周userInterfaractionEnabled 是开启控件交互事件的属性, 如果这个属性没有开启, 那么再怎么调试 也是废了. 那么第一步就要检查这个.
2. 检查视图层级
检查控件的位置是不是在父视图上,如果没有就当然不能点击了, 这里就有一种情况, 如果子视图的高度超过父视图, 而子视图上最靠边的控件就是button, 那么点击这个button的时候就不会触发事件, 这个情况很难从逻辑检查出来bug所在, 只能从UI查看得到.
[图片上传失败...(image-7ba5-1637482497417)]
3. 检查控件是否被覆盖
如果button上层有一层透明的视图覆盖掉的话, 也是无法响应的. 这个从逻辑和UI上都可以检查得到, 还是比较容易的
4. frame
检查button 的 frame, 如果实际的frame和展示出来的UI 不一直的话, 那么超出来的部分也是没有响应事件的.
5. touchBegin
可以在父视图上加上一个touchBegin方法,检查一下。是不是父视图的交互事件给关闭掉了.
6. 响应链
可以通过查看响应者链, 事件传递到哪一层, 在哪一层被响应了, 是什么导致没有传递到下一层的. NSLog(@"%@",button.responder);
NSLog(@"%@",button.responder.responder);等等
7. 其他
比如没有添加点击事件, 等等...
ps:其实这个问题出来的时候第一时间想到的就是响应者链条和事件传递相关点,事实证明光想到可能出现的点到解决问题可能差了一个小时。。。