iOS 響應者鏈

joker_king發表於2018-12-19

響應者鏈

  • 響應者鏈是一個響應者的連線序列,事件或者動作訊息依次傳遞,它允許響應者把事件處理的職責轉交給其他更高層次的物件。應用程式通過向上傳遞一個事件來查詢合適的處理物件,因為點選監測檢視也是一個響應者物件,應用程式在處理觸控事件的時候,也可以利用響應者鏈。
  • 由多個響應者組成的鏈

響應者

  • iOS中所有能響應事件(觸控,晃動,遠端事件)的物件都是響應者。
  • 系統定義了一個抽象的父類UIResponder來表示響應者,其子類都是響應者。

響應者的檢測事件

  • 硬體檢測到觸控事件,會將資訊交給UIApplication,開始檢測。
  • UIApplication -> window -> viewController -> view -> 檢測所有子類。
  • 最終確認觸碰的位置,完成響應者鏈的查詢過程。

處理觸控事件

  • 檢測到響應者後,實現touchesBegain:withEvent;等方法,即處理事件。
  • 如果響應者沒有處理事件,事件會向下傳遞。如果沒有響應者處理,則丟棄觸控事件。
  • 事件處理的順序與觸控檢測查詢檢測的順序相反。
  • 觸控的子檢視 -> view -> viewController -> window -> UIApplication。

阻斷響應者鏈

  • 響應者鏈可以被打斷,無法完成檢測查詢的過程。
  • 檢視類的屬,userInteractionEnabled,關閉後能阻斷查詢過程。

相關文章