簡體   English   中英

“第一響應者” - 我做對了嗎?

[英]“First Responder” - Did I get that right?

讓我簡要總結一下:nib文件中的“First Responder”是一個對象,它表示具有用戶焦點的UI控件元素。 因此,如果用戶單擊控件,則nib將單擊的UI控件設置為First Responder。 在我的應用程序中,我可以從筆尖找到“First Responder”的出口,這樣我就可以通過點擊向用戶激活的任何內容發送消息“make red font color”。

然后,如果此第一響應者UI控件不理解該消息,則消息將在響應者鏈中傳遞,直到父元素或祖父母(等等)UI控件元素理解該消息。 否則它將被忽略。

因此,First Responder始終建立具有焦點的UI控件的“鏈接”。 是對的嗎?

正確的整體情況,第一段錯誤的實施細節。

NibFile中的“第一響應者”是一個對象......

不,實際上,First Responder是nil 將UI控件(例如,按鈕)連接到nib中的First Responder相當於代碼中的[control setTarget:nil]

nib窗口中First Responder假對象的原因是,在IB中,您同時設置目標和動作(按住Ctrl鍵拖動到目標,從彈出菜單中選擇動作)。 您無法設置操作並保持目標未設置,就像您可以在代碼中一樣,因此要將其設置為nil ,您需要明確地這樣做。 這就是First Responder的用途:它是一個代表nil的虛假對象,因此你可以像設置特定的真實目標一樣設置目標和動作。

當然,你不能使用此設置什么別的nil ,只有若干意見的目標。 你只能用它來表示First Responder,而不是其他任何東西。

因此,如果用戶點擊UI控件,Nib會設置...

筆尖沒有做任何事情。 它只是存儲在磁盤上的凍干對象集合。 即使你實例化NSNib,你所做的只是解凍一些對象。 這是做事的對象。

在手頭的情況下,當您取消歸檔從筆尖連接到First Responder的控件時,其目標設置為nil (請記住,這就是First Responder真正的目標: nil的目標)。 當控件的目標nil並且用戶點擊它時,它會將其動作發送給當時第一個響應者。

你的第二和第三段是正確的。

你的理解是不完整的。 響應者鏈包括的不僅僅是我們通常認為的“UI控件”,包括最重要的當前文檔。 其中一個很大的好處是,它允許您與概念上的“當前”任何東西進行交互 - 當前窗口,當前文本字段,當前文檔等 - 沒有太多的麻煩來找到它。

響應者是在發生事件(例如單擊按鈕)時將執行操作(調用函數)的任何對象。 響應者鏈是一系列對象,每個對象包含在一起 - 例如窗口內面板內的按鈕。 當一個事件發生時,我們遍歷鏈,直到找到一個沒有響應者設置為nil的對象,因此可以響應該事件。 因此,我們可以為整個窗口提供單個響應器,而不是為窗口中的每個按鈕提供響應器對象。 第一個響應者只是響應者鏈中的第一個對象 - 將事件鏈接到第一個響應者允許事件向上傳遞鏈。

檢查此鏈接,它做得很好解釋。 我認為你有它的要點:

http://cocoadev.com/FirstResponder

從來源:

FirstResponder是響應者鏈中的第一個對象,它有機會響應事件。

暫無
暫無

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

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