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 響應者鏈 UIResponder、UIEvent 和 UIControl 的使用iOSUI
- 理解響應者和響應鏈如何處理事件事件
- 事件傳遞和響應者鏈條事件
- 事件傳遞和響應鏈事件
- iOS GestureRecognizer與UIResponder touch事件響應iOSUI事件
- UIResponder事件響應鏈學習筆記UI事件筆記
- 淺談 iOS 事件的傳遞和響應過程iOS事件
- Flutter 使用者互動事件的響應Flutter事件
- iOS探索:UI檢視之事件傳遞&檢視響應iOSUI事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- iOS 11開發教程(二十二)iOS11應用檢視實現按鈕的響應(2)iOS
- iOS11開發教程(二十三)iOS11應用檢視實現按鈕的響應(3)iOS
- iOS 中的事件傳遞和響應機制 - 原理篇iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- 影響軟體供應鏈安全的10大風險因素
- 【應急響應】Windows應急響應入門手冊Windows
- 資料洩露後,攻擊者是如何應對事件響應的?事件
- 從開發者的角度分析iOS應如何省電iOS
- Vue響應式—-資料響應式原理Vue
- iOS 11開發教程(二十一)iOS11應用檢視美化按鈕之實現按鈕的響應(1)iOS
- iOS UIButton之防止重複點選(控制事件響應時間間隔)iOSUI事件
- Harbor使用者必讀:安全告警和響應機制
- php響應PHP
- HTTP 響應HTTP
- 【供應鏈】供應鏈的底牌
- iOS的鏈式開發iOS
- 供應鏈的管理趨勢會影響企業社會責任
- windows應急響應(二)Windows
- 應急響應命令(Linux)Linux
- Linux應急響應排查Linux
- iOS應用轉讓到其他開發者賬號步驟iOS
- [譯]iOS開發者在Swift中應避免過度使用@objciOSSwiftOBJ
- 請求和響應
- npm無響應NPM
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- iOS 11.3.1正式釋出 解決了iPhone8換屏無響應問題iOSiPhone