iOS 響應者鏈
joker_king發表於2018-12-19
響應者鏈
- 響應者鏈是一個響應者的連線序列,事件或者動作訊息依次傳遞,它允許響應者把事件處理的職責轉交給其他更高層次的物件。應用程式通過向上傳遞一個事件來查詢合適的處理物件,因為點選監測檢視也是一個響應者物件,應用程式在處理觸控事件的時候,也可以利用響應者鏈。
- 由多個響應者組成的鏈
響應者
- iOS中所有能響應事件(觸控,晃動,遠端事件)的物件都是響應者。
- 系統定義了一個抽象的父類UIResponder來表示響應者,其子類都是響應者。
響應者的檢測事件
- 硬體檢測到觸控事件,會將資訊交給UIApplication,開始檢測。
- UIApplication -> window -> viewController -> view -> 檢測所有子類。
- 最終確認觸碰的位置,完成響應者鏈的查詢過程。
處理觸控事件
- 檢測到響應者後,實現touchesBegain:withEvent;等方法,即處理事件。
- 如果響應者沒有處理事件,事件會向下傳遞。如果沒有響應者處理,則丟棄觸控事件。
- 事件處理的順序與觸控檢測查詢檢測的順序相反。
- 觸控的子檢視 -> view -> viewController -> window -> UIApplication。
阻斷響應者鏈
- 響應者鏈可以被打斷,無法完成檢測查詢的過程。
- 檢視類的屬,userInteractionEnabled,關閉後能阻斷查詢過程。