事件處理(三)

  • 響應者鏈條

    • 簡介(學了響應者鏈條,目的知道誰最終處理事件。)
  • 用戶點擊屏幕后產(chǎn)生的一個觸摸事件,經(jīng)過一系列的傳遞過程后,會找到最合適的視圖控件來處理這個事件

  • 找到最合適的視圖控件后,就會調用控件的touches方法來作具體的事件處理

  • 這些touches方法的默認做法是將事件順著響應者鏈條向上傳遞,將事件交給上一個響應者進行處理

    • touch默認做法:自己不處理事件,交給上一個響應者處理touch事件。
    • 響應者鏈條,點擊綠色的view,如果不處理事件,就會往上傳遞。
    • 驗證touch的默認做法 先恢復所有view的默認做法
    • 監(jiān)聽黃色點擊,藍色點擊。
    • 黃色調用默認做法,事件傳遞給誰處理? 藍色

結論:1. touch的默認做法:自己不處理,交給上一個響應者。2. 上一個響應者默認是父控件

* 兩個view怎么同時處理事件? 一個view處理方法,在調用父類默認的做法
1.png
1.png
  • 事件傳遞的完整過程
    1> 先將事件對象由上往下傳遞(由父控件傳遞給子控件),找到最合適的控件來處理這個事件。
    2> 調用最合適控件的touches….方法
    3> 如果調用了[super touches….];就會將事件順著響應者鏈條往上傳遞,傳遞給上一個響應者
    4> 接著就會調用上一個響應者的touches….方法
  • 響應者鏈的事件傳遞過程
    1.如果view的控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖
    2.在視圖層次結構的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理
    3.如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象
    4.如果UIApplication也不能處理該事件或消息,則將其丟棄

  • 如何判斷上一個響應者

1> 如果當前這個view是控制器的view,那么控制器就是上一個響應者

2> 如果當前這個view不是控制器的view,那么父控件就是上一個響應者

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容