-
響應者鏈條
- 簡介(學了響應者鏈條,目的知道誰最終處理事件。)
用戶點擊屏幕后產(chǎn)生的一個觸摸事件,經(jīng)過一系列的傳遞過程后,會找到最合適的視圖控件來處理這個事件
找到最合適的視圖控件后,就會調用控件的touches方法來作具體的事件處理
-
這些touches方法的默認做法是將事件順著
響應者鏈條向上傳遞,將事件交給上一個響應者進行處理- touch默認做法:自己不處理事件,交給上一個響應者處理touch事件。
- 響應者鏈條,點擊綠色的view,如果不處理事件,就會往上傳遞。
- 驗證touch的默認做法 先恢復所有view的默認做法
- 監(jiān)聽黃色點擊,藍色點擊。
- 黃色調用默認做法,事件傳遞給誰處理? 藍色
結論:1. touch的默認做法:自己不處理,交給上一個響應者。2. 上一個響應者默認是父控件
* 兩個view怎么同時處理事件? 一個view處理方法,在調用父類默認的做法

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,那么父控件就是上一個響應者