[英]What is a formal definition of a first responder in iOS?
我知道第一響應者對象是根據輸入活動等接收回調信號,並且它會在鏈中冒泡,直到找到願意處理它的響應者。
但更正式地說,第一響應者的范圍是什么? 例如,它是應用程序范圍的響應程序嗎? 似乎作為第一響應者只是說這個特定對象將收到交互通知。 另一個響應者可以竊取第一響應者的狀態嗎?
請解釋或指導我了解一些相關信息。 我已經閱讀了 Apple 對什么是響應者的一般解釋。 我正在尋找一種更成熟的解釋。
iOS 中第一響應者的范圍由視圖層次結構決定。 請記住,響應者是響應者層次結構的一部分,由 Apple 文檔定義:
響應者是一個可以響應事件並處理它們的對象。 所有響應者對象都是最終從 UIResponder (iOS) 或 NSResponder (OS X) 繼承的類的實例。
實際上,所有響應者都是通往應用程序本身的潛在響應者鏈的一部分。 這意味着響應者的范圍取決於你必須走多遠才能獲得能夠處理響應的對象。 如果第一響應者是 UI 元素,例如 UITextField,則您的范圍與該響應者的范圍相關聯。
在此圖像中,iOS 第一響應者層次結構顯示在左側(右側是 OS X):
要回答問題的第二部分,是的,如果用戶與元素交互,對象可以“竊取”第一響應者狀態,例如:
...並且您可以通過某些功能賦予他們第一響應者狀態:
[textField3 becomeFirstResponder]; //This is now the first responder
[textField4 becomeFirstResponder]; //Now textField4 has 'stolen' first responder status
[textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up
對於其他閱讀本文但沒有找到 Apple 文檔的人來說,一個很好的起點是在這里找到的響應者層次結構解釋: https : //developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia- CocoaApp/Responder.html
我希望這有幫助!
這是窗口的屬性。 該窗口始終只有一個第一響應者。 任何 UIResponder 都可以通過發送becomeFirstResponder
來聲明第一響應者狀態,這就是為什么您可以通過向 UITextField 發送該消息來使它獲得“焦點”。
在窗口對象之前請記住一個前處理。
當應用程序對象獲得觸摸對象或其他對象時,它會轉換為它的事件對象並將其分派給窗口對象。 並且 window 對象發送到最合適的對象來處理事件(響應者鏈)。 所以窗口實例不再有屬性第一響應者實例。
weak var firstResponder: NSResponder? { get }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.