簡體   English   中英

什么是第一響應者?

[英]What is first responder?

根據 Apple 的文檔

當您的應用程序收到事件時,UIKit 會自動將該事件定向到最合適的響應者 object,稱為第一響應者。

同一文檔解釋了如何確定第一響應者

UIView的hitTest:withEvent:方法遍歷視圖層級,尋找最深的包含指定觸摸的子視圖,成為觸摸事件的第一響應者。

我不明白的是為什么 UIResponder 有一個名為isFirstResponder的屬性? 以及為什么存在becomeFirstResponder 第一響應者不應該由 UIKit 根據特定觸摸事件的位置動態確定嗎?

此外, canBecomeFirstResponderUIView返回NO ,這顯然是不正確的,因為視圖會處理觸摸事件。

我認為可以解決這種混淆的唯一方法是,如果所有這些方法都只與搖動、遠程控制和編輯菜單類型的事件相關。 但是文檔對此並不清楚。

我不明白的是為什么 UIResponder 有一個名為firstResponder的屬性?

沒有。 UIResponder沒有名為firstResponder的公共屬性。

以及為什么存在becomeFirstResponder

becomeFirstResponder的主要用途是以編程方式選擇哪個文本字段獲取鍵盤事件。

第一響應者不應該根據特定觸摸事件的位置由 UIKit 動態確定嗎?

事件的種類比觸摸事件多。 例如,有鍵盤事件和動作事件。 UIKit 跟蹤的第一響應者用於非觸摸事件。 在其他系統中,這個概念通常被稱為“焦點”或更具體地說是“鍵盤焦點”。 但是(在 iOS 中)第一響應者可以是不響應鍵盤事件的視圖。

此外, canBecomeFirstResponderUIView返回NO ,這顯然是不正確的,因為視圖會處理觸摸事件。

沒關系,因為觸摸事件並不是真正從第一響應者開始的。 它們從-[UIView hitTest:withEvent:]返回的視圖開始。

我認為可以解決這種混淆的唯一方法是,如果所有這些方法都只與搖動、遠程控制和編輯菜單類型的事件相關。 但是文檔對此並不清楚。

以first responder開頭的non-touch event的種類比較多,除此之外,你已經正確解決了。

這不是一個“快速回答”的主題——最好的辦法是進行一些搜索並通讀幾篇關於它的文章。

但是,簡而言之...

.becomeFirstResponder()通常用於激活文本字段而無需用戶點擊該字段。 常見的情況是有多個文本字段(填寫界面的表單類型),您會根據輸入自動“跳轉”到下一個字段:

myTextField.becomeFirstResponder()

同樣,正如您在瀏覽文檔時已經看到的那樣,它遠不止於此……但這里的答案太多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM