在最近的開發(fā)工作中, view上寫了一個button, 但是點擊總是沒有響應事件很是苦惱, 雖然最后的解決方案非常簡單, 看起來自己就和傻子一樣, 但是再沒有找到問題之前, 這個就是一個難題, 所以將這一次的尋找bug的過程給記錄下來, 給以后的自己看看, 找bug從最簡單的地方找起, 不要想著這里不可能有問題之類的, 有這種想法的話, 那么bug很有可能就在你瞧不起的最簡單的地方.
1. 檢查userInterfaractionEnabled
檢查父視圖的userInterfaractionEnabled是否打開, 眾所周userInterfaractionEnabled 是開啟控件交互事件的屬性, 如果這個屬性沒有開啟, 那么再怎么調(diào)試 也是廢了. 那么第一步就要檢查這個.
2. 檢查視圖層級
檢查控件的位置是不是在父視圖上槽棍,如果沒有就當然不能點擊了, 這里就有一種情況, 如果子視圖的高度超過父視圖, 而子視圖上最靠邊的控件就是button, 那么點擊這個button的時候就不會觸發(fā)事件, 這個情況很難從邏輯檢查出來bug所在, 只能從UI查看得到.
[圖片上傳失敗...(image-7ba5-1637482497417)]
3. 檢查控件是否被覆蓋
如果button上層有一層透明的視圖覆蓋掉的話, 也是無法響應的. 這個從邏輯和UI上都可以檢查得到, 還是比較容易的
4. frame
檢查button 的 frame, 如果實際的frame和展示出來的UI 不一直的話, 那么超出來的部分也是沒有響應事件的.
5. touchBegin
可以在父視圖上加上一個touchBegin方法,檢查一下停局。是不是父視圖的交互事件給關(guān)閉掉了.
6. 響應鏈
可以通過查看響應者鏈, 事件傳遞到哪一層, 在哪一層被響應了, 是什么導致沒有傳遞到下一層的. NSLog(@"%@",button.responder);
NSLog(@"%@",button.responder.responder);等等
7. 其他
比如沒有添加點擊事件, 等等...
ps:其實這個問題出來的時候第一時間想到的就是響應者鏈條和事件傳遞相關(guān)點踩叭,事實證明光想到可能出現(xiàn)的點到解決問題可能差了一個小時裆赵。阳谍。窿春。