事件的傳遞和響應(響應者鏈條)

2021-07-15 19:23:00 字數 1786 閱讀 5196

作用:

uievent稱為事件物件,記錄事件產生的時刻和型別

3.主視窗會在檢視層次結構中找到乙個最合適的檢視來處理觸控事件,這也是整個事件處理過程的第一步

4.找到合適的檢視控制項後,就會呼叫檢視控制項的touches方法來作具體的事件處理(這其實就是事件的響應,下面詳細介紹)

重點:1.如何找到最合適的控制項來處理事件?*

1.自己是否能接收觸控事件?

2.觸控點是否在自己身上?

3.從後往前遍歷子控制項(直屬子控制項),重複前面的兩個步驟(遞迴)

4.如果沒有符合條件的子控制項,那麼自己就最適合處理

2.能否接受觸控事件的判斷準則:

1.不接收使用者互動userinteractionenabled= no;

2.隱藏hidden= yes

3.透明度alpha= 0.0~0.01

3.如果父控制項不能接收觸控事件,那麼子控制項就不可能接收到觸控事件

4.uiimageview的userinteractionenabled預設就是no,因此uiimageview

以及它的子控制項預設是不能接收觸控事件的

三 . 事件的響應(重點)

這裡所說的事件的響應其實就是呼叫touches方法

找到最合適的檢視控制項後,就會呼叫控制項的touches方法來作具體的事件處理(響應)

touchesbegan…

touchesmoved…

touchedended…

這些touches方法的預設做法是將事件順著響應者鏈條向上傳遞,將事件交給上乙個響應者進行處理(響應)簡而言之就是:如果找到了最合適的響應者,但是如果其沒有實現touches方法,就會呼叫其上乙個響應者物件的touches方法

響應者鏈條:由很多響應者(繼承了uiresponder的物件)鏈結在一起組合起來的乙個鏈條

如何判斷當前響應者的上乙個響應者是誰呢?

判斷當前是否是控制器的view,如果是控制器的view,那麼上乙個響應者就是控制器

如果當前不是控制器的view,上乙個響應者就是其父控制項

響應者鏈條的作用?

可以讓乙個觸控事件發生的時候讓多個響應者同時響應事件(也就是執行touches方法)

做法:在當前響應者的touches方法中呼叫super的touches方法

總結:事件傳遞的完整過程:

1.事件由上往下傳遞(由父控制項傳遞給子控制項),找到最合適的控制項來處理這個事件

2.呼叫最合適控制項的touches….方法

如果呼叫了[super touches….]; 就會將事件順著響應者鏈條往上傳遞,傳遞給上乙個響應者,此時兩者都能響應事件

3.如果最合適的控制項沒有實現touches….方法,就會將事件順著響應者鏈條往上傳遞,傳遞給上乙個響應者,由上乙個響應者來響應事件

簡而言之:

2.事件的響應 : 呼叫最合適的響應者的touches方法--> 如果其沒有實現,預設做法,將事件傳遞給上乙個響應者-->找到上乙個響應者,呼叫它的touches方法

我們使用響應者鏈條實現控制器的跳轉的實際應用

如果使用好響應者鏈可以幹很多事 大家自己去

事件傳遞和響應者鏈條

附上一張圖能很好地來說明事件是怎麼傳遞的 二 響應者鏈條 1.響應者鏈條示意圖 3.如何尋找下乙個響應者?1 如果當前這個view是控制器的view,那麼控制器就是上乙個響應者。2 如果當前這個view不是控制器的view,那麼父控制項就是上乙個響應者。4.如果最合適處理事件的控制項不想處理控制項,...

事件處理響應者鏈條

mj 事件的完整處理過程 1.先將事件物件由上往下傳遞 由父控制項傳遞給子控制項 找到最合適的控制項來處理這個事件 2.呼叫最合適控制項的touches.方法 3.如果touches.裡面呼叫了 super touches.方法,則順著響應者鏈條往上找,找到上乙個響應者 4.執行上乙個響應者的tou...

響應者鏈條

發生觸控事件後,系統佇列 不接收使用者互動 userinteractionenabled no隱藏 hidden yes透明 alpha 0.0 0.01 主視窗會在檢視層次結構中 找到乙個最合適的檢視來處理觸控事件 但是這僅僅是整個事件處理過程的第一步 找到合適的檢視控制項後,就會呼叫檢視控制項的...