事件處理的完整過程
1> 先將事件對象由上往下傳遞(由父控件傳遞給子控件),找到最合適的控件來處理這個事件。
2> 調用最合適控件的touches….方法
3> 如果調用了[super touches….];就會將事件順著響應者鏈條往上傳遞,傳遞給上一個響應者
4> 接著就會調用上一個響應者的touches….方法
如何判斷上一個響應者
1> 如果當前這個view是控制器的view,那麼控制器就是上一個響應者
2> 如果當前這個view不是控制器的view,那麼父控件就是上一個響應者
響應者鏈的事件傳遞過程
如果view的控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖
在視圖層次結構的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理
如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象
如果UIApplication也不能處理該事件或消息,則將其丟棄
響應者
touches方法做法是將事件順著響應著鏈條向上傳遞,交給上一響應者進行處理。
默認方法中[super touches... withEvent..];
控件能響應事件則必須實現重寫touches方法,在其方法中處理事件,實現響應。
多控件處理的原則是1在響應者鏈條上,且是其控件的父控件2且實現touches方法。