
項(xiàng)目的需求:在后面大的白色view中,上部添加一個(gè)藍(lán)色的Aview,下部添加一個(gè)橙色的Bview,在Bview中添加一個(gè)紅色按鈕,點(diǎn)擊紅色按鈕去處理事件。
遇到的問(wèn)題:在按照上面的樣式,畫(huà)好界面之后,也給按鈕添加了點(diǎn)擊事件響應(yīng)方法,但是點(diǎn)擊按鈕沒(méi)有反應(yīng),代碼壓根走不到響應(yīng)方法里面去。
解決思路:該點(diǎn)擊事件沒(méi)有分配給button去處理,所以是響應(yīng)者鏈的問(wèn)題。
查找原因辦法:1,用圖層層級(jí)工具檢測(cè),發(fā)現(xiàn)視圖上面沒(méi)有其他view遮蓋。
2,檢測(cè)按鈕機(jī)器父控件的alpha,userInteractionEnabled,hidden等熟悉,都沒(méi)問(wèn)題。都可以接收點(diǎn)擊事件。
最后發(fā)現(xiàn)所有常規(guī)方法都發(fā)現(xiàn)不了問(wèn)題在哪里。
揭曉答案:我把Bview添加到了Aview中,成為Aview的子控件。
分析原因:Bview本來(lái)應(yīng)該添加到白色的大View中,按照響應(yīng)者鏈條,點(diǎn)擊按鈕事件會(huì)正常分配給button。但是我卻把Bview誤添加到了Aview中,此時(shí)點(diǎn)擊button,按鈕接收不到事件,因?yàn)橐隻utton接收,事件必須從底層出發(fā),一層一層經(jīng)過(guò)Aview等祖先控件傳遞到button,但是現(xiàn)在點(diǎn)擊的button所在的位置,不在Aview的范圍內(nèi),Aview不會(huì)接受處理該事件,Aview都不接受處理了,那么他的子view,button肯定也不會(huì)響應(yīng)該事件。
解決方法:一句代碼把Bview正確添加到白色大view中,即可。事件的底層處理機(jī)制,是解決該問(wèn)題的關(guān)鍵。