關(guān)于iOS開發(fā)button點(diǎn)擊事件不響應(yīng)問題

在最近的開發(fā)工作中, view上寫了一個(gè)button, 但是點(diǎn)擊總是沒有響應(yīng)事件很是苦惱, 雖然最后的解決方案非常簡單, 看起來自己就和傻子一樣, 但是再?zèng)]有找到問題之前, 這個(gè)就是一個(gè)難題, 所以將這一次的尋找bug的過程給記錄下來, 給以后的自己看看, 找bug從最簡單的地方找起, 不要想著這里不可能有問題之類的, 有這種想法的話, 那么bug很有可能就在你瞧不起的最簡單的地方.

1. 檢查userInterfaractionEnabled

檢查父視圖的userInterfaractionEnabled是否打開, 眾所周userInterfaractionEnabled 是開啟控件交互事件的屬性, 如果這個(gè)屬性沒有開啟, 那么再怎么調(diào)試 也是廢了. 那么第一步就要檢查這個(gè).

2. 檢查視圖層級(jí)

檢查控件的位置是不是在父視圖上,如果沒有就當(dāng)然不能點(diǎn)擊了, 這里就有一種情況, 如果子視圖的高度超過父視圖, 而子視圖上最靠邊的控件就是button, 那么點(diǎn)擊這個(gè)button的時(shí)候就不會(huì)觸發(fā)事件, 這個(gè)情況很難從邏輯檢查出來bug所在, 只能從UI查看得到.

[圖片上傳失敗...(image-7ba5-1637482497417)]

3. 檢查控件是否被覆蓋

如果button上層有一層透明的視圖覆蓋掉的話, 也是無法響應(yīng)的. 這個(gè)從邏輯和UI上都可以檢查得到, 還是比較容易的

4. frame

檢查button 的 frame, 如果實(shí)際的frame和展示出來的UI 不一直的話, 那么超出來的部分也是沒有響應(yīng)事件的.

5. touchBegin

可以在父視圖上加上一個(gè)touchBegin方法,檢查一下。是不是父視圖的交互事件給關(guān)閉掉了.

6. 響應(yīng)鏈

可以通過查看響應(yīng)者鏈, 事件傳遞到哪一層, 在哪一層被響應(yīng)了, 是什么導(dǎo)致沒有傳遞到下一層的. NSLog(@"%@",button.responder);
NSLog(@"%@",button.responder.responder);等等

7. 其他

比如沒有添加點(diǎn)擊事件, 等等...

ps:其實(shí)這個(gè)問題出來的時(shí)候第一時(shí)間想到的就是響應(yīng)者鏈條和事件傳遞相關(guān)點(diǎn),事實(shí)證明光想到可能出現(xiàn)的點(diǎn)到解決問題可能差了一個(gè)小時(shí)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容