2010-10-12 257 views
0

通常我們使用resignFirstResponder來隱藏iphone應用程序中的鍵盤。 例如,當我們使用一個UISearchBar,之後用戶點擊搜索按鈕,我們隱藏鍵盤通過實施,在searchBarSearchButtonClicked功能是這樣的:響應者究竟意味着什麼?

-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{ 
     NSLog(@"Search Button Click, result should be show here"); 
     [searchBar setShowsCancelButton:NO animated:YES]; 
     [searchBar resignFirstResponder];  
     self.dictTableView.allowsSelection = YES; 
     self.dictTableView.scrollEnabled = YES;  
} 

我們設置了搜索欄的第一個響應者,那麼鍵盤會在用戶點擊搜索按鈕後隱藏。

它爲什麼這樣工作?我們沒有調用任何隱藏鍵盤的功能,我們只是將searchBar設置爲第一響應者,爲什麼系統會自動隱藏鍵盤?

任何人都可以解釋這個過程的機制?

非常感謝!

回答

4

Objective-C通過以屬於目標對象的方法名稱的選擇器形式向對象發送消息來工作。 「響應者」是將響應由UI事件發送的消息的對象。

響應者生活在一個稱爲響應者鏈的層次結構中。如果響應者無法理解UI消息,它會將其轉發給鏈中的下一個響應者,直到應用程序對象本身。

在文本字段的情況下,點擊該字段將導致該字段成爲第一響應者,以便它攔截所有後續的UI事件。文本字段用鍵盤捕捉UI事件,以便自動喚起鍵盤。文本字段對任何與鍵盤無關的輸入都沒有興趣,所以當它作爲第一響應者辭職時,它將把鍵盤移開。

這是一個高度面向對象的API的美麗。您不必微觀管理標準行爲。對象本身會爲你處理它。如果你習慣於使用更程序化的API,可能會有點迷惑。 (作爲一個例外,這是一個古老的帽子,但在90年代早期Objective-C和NextStep是開創性技術時,這種風格又回到了原來的狀態.Tim Burners-Lee發明了網絡瀏覽器,所以他會有藉口買下一個立方體。)

+0

+1響應者鏈文檔:http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/CocoaFundamentals/CoreAppArchitecture/CoreAppArchitecture.html#//apple_ref/doc/uid/TP40002974-CH8-SW17 – 2010-10-12 17:11:31

+0

謝謝你非常喜歡你的解釋!它有很大幫助!現在我可以更好地理解「響應者」的內容。 – 2010-10-13 16:02:47

0

「第一響應者」是當前正在接受事件(鍵盤或觸摸事件)的UI對象。希望鍵盤輸入的對象(如搜索欄)會導致鍵盤在成爲第一響應者時出現。

當您告訴搜索欄停止成爲「第一響應者」([searchBar resignFirstResponder])時,鍵盤不再需要並且消失。

+0

很酷。你所說的是,當搜索欄成爲第一響應者時,搜索欄將自動調用顯示鍵盤功能,當搜索欄被取消激活時,它將自動調用隱藏鍵盤功能。這是對的嗎?所以,假設我有另一個對象是按鈕,如果我將該按鈕設置爲第一響應者,鍵盤也將隱藏,對吧? – 2010-10-13 16:09:21

相關問題