记一次Button无响应bug

1,468 阅读2分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

起因

在一次开发中, view上写了一个button, 但是点击总是没有响应事件很是苦恼, 虽然最后的解决方案非常简单, 看起来自己就和傻子一样, 但是再没有找到问题之前, 这个就是一个难题, 所以将这一次的寻找bug的过程给记录下来, 给以后的自己看看, 找bug从最简单的地方找起, 不要想着这里不可能有问题之类的, 有这种想法的话, 那么bug很有可能就在你瞧不起的最简单的地方.

1. 检查userInterfaractionEnabled

检查父视图的userInterfaractionEnabled是否打开, 众所周userInterfaractionEnabled 是开启控件交互事件的属性, 如果这个属性没有开启, 那么再怎么调试 也是废了. 第一步就要检查这个.

2. 检查视图层级

检查控件的位置是不是在父视图上,如果没有就当然不能点击了, 这里就有一种情况, 如果子视图的高度超过父视图, 而子视图上最靠边的控件就是button, 那么点击这个button的时候就不会触发事件, 这个情况很难从逻辑检查出来bug所在, 只能从UI查看得到.

3. 检查控件是否被覆盖

如果button上层有一层透明的视图覆盖掉的话, 也是无法响应的. 这个从逻辑和UI上都可以检查得到, 还是比较容易的

4. frame

检查button 的 frame, 如果实际的frame和展示出来的UI 不一直的话, 那么超出来的部分也是没有响应事件的.

5. touchBegin

可以在父视图上加上一个touchBegin方法,检查一下。是不是父视图的交互事件给关闭掉了.

6. 响应链

可以通过查看响应者链, 事件传递到哪一层, 在哪一层被响应了, 是什么导致没有传递到下一层的. NSLog(@"%@",button.responder);
NSLog(@"%@",button.responder.responder);等等

7. 其他

比如没有添加点击事件, 等等...

总结

如果通过上述的方法还是找不到响应的bug所在, 我也无能为力, 如果你还有更好的方法请评论区告知我, 我还是找不到的话, 只能打包回家了.