iOS響應者鏈
每一個繼承於UIResponder都是一個點,通過nextResponder來進行指向
其指向規則是:
UIView
如果 view 是一個 view controller 的 root view,nextResponder 是這個 view controller.
如果 view 不是 view controller 的 root view,nextResponder 則是這個 view 的 superview
UIViewController
如果 view controller 的 view 是 window 的 root view, view controller 的 nextResponder 是這個 window
如果 view controller 是被其他 view controller presented調起來的,那麼 view controller 的 nextResponder 就是發起調起的那個 view controller
UIWindow
window 的 nextResponder 是 UIApplication 物件.
UIApplication
UIApplication 物件的 nextResponder 是 app delegate, 但是 app delegate 必須是 UIResponder 物件,並且不能使 view ,view controller 或 UIApplication 物件他本身.
那麼響應鏈是如何工作,正確找到應該響應該事件的響應者的?
說白了就是,當有touch事件來的時候,會從最下面的檢視開始執行 hitTest:withEvent: ,如果符合成為響應者的條件,就會繼續遍歷它的 subviews 繼續執行 hitTest:withEvent: ,直到找到最合適的view成為響應者。這裡要注意幾個點:
符合響應者的條件包括
touch事件的位置在響應者區域內
響應者 hidden 屬性不為 YES
響應者 透明度 不是 0
響應者 userInteractionEnabled 不為 NO
遍歷 subview 時,是從上往下順序遍歷的,即 view.subviews 的 lastObject 到 firstObject 的順序,找到合適的響應者view,即停止遍歷.
相關文章
- iOS 響應者鏈iOS
- IOS - 響應者鏈條iOS
- iOS開發-響應鏈iOS
- [譯] iOS 響應者鏈 UIResponder、UIEvent 和 UIControl 的使用iOSUI
- 理解響應者和響應鏈如何處理事件事件
- 事件傳遞和響應者鏈條事件
- 響應者鏈及相關機制總結
- Cocoa Touch事件處理流程--響應者鏈(轉載)事件
- 事件傳遞和響應鏈事件
- iOS GestureRecognizer與UIResponder touch事件響應iOSUI事件
- UIResponder事件響應鏈學習筆記UI事件筆記
- Flutter 使用者互動事件的響應Flutter事件
- iOS開發那些事-響應記憶體警告iOS記憶體
- 淺談 iOS 事件的傳遞和響應過程iOS事件
- 前端快閃四: 攔截axios請求和響應前端iOS
- 影響軟體供應鏈安全的10大風險因素
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- iOS探索:UI檢視之事件傳遞&檢視響應iOSUI事件
- vue中用axios攔截器攔截請求和響應VueiOS
- iOS 函式響應式程式設計 (ReactiveCocoa)– 前篇iOS函式程式設計React
- iOS中觸控事件的傳遞和響應機制iOS事件
- 【應急響應】Windows應急響應入門手冊Windows
- 資料洩露後,攻擊者是如何應對事件響應的?事件
- 《高效能iOS 應用開發》之影響移動應用效能的因素iOS
- iOS 11開發教程(二十二)iOS11應用檢視實現按鈕的響應(2)iOS
- Harbor使用者必讀:安全告警和響應機制
- iOS 中的事件傳遞和響應機制 - 原理篇iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- Vue響應式—-資料響應式原理Vue
- Vue響應式----資料響應式原理Vue
- iOS11開發教程(二十三)iOS11應用檢視實現按鈕的響應(3)iOS
- HTTP 響應HTTP
- php響應PHP
- 超越響應:滿足使用者需求的網站設計網站
- iOS響應式程式設計:ReactiveCocoa vs RxSwift 選誰好iOS程式設計ReactSwift
- windows應急響應(二)Windows
- 響應式程式設計與響應式系統程式設計