2011-03-15 46 views
11

我使用的是UISearchDisplayController在我的應用程序。當用戶在搜索結果中選擇一個項目回來我停用UISearchDisplayController。取消激活控制器會清除用戶輸入的文本。我想保留在那裏。我可以強制文本回到UISearchBar,通過在控制器停用後再次設置它。如何設置文本的UISearchBar無需激活UISearchDisplayController

像這樣:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = searchText; 

其中一期工程。

但是,我看到一個時機的問題,如果我不動畫取消呼叫。調用 SETACTIVE像這樣:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:NO]; 
self.searchDisplayController.searchBar.text = searchText; 

導致UISearchDisplayController變得活躍起來!

是有,我可以設置的UISearchBar的文本不具有與成爲活動相關的UISearchDisplayController的方法嗎?任何其他建議來解決此問題?

回答

10

對於任何一個其他人不知道如何在我的代表加入這個要做到這一點,我設法得到它的工作:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    if(!controller.isActive){ 
     controller.searchResultsTableView.hidden = YES; 
     return NO; 
    } 
    controller.searchResultsTableView.hidden = NO; 

    [....] 

    return YES; 
} 
+0

錯誤:控制到達void函數 – malhal 2012-06-06 00:57:33

+0

感謝@indiekiduk我已經更新上面的代碼的結束。 – Sig 2012-06-06 11:15:41

3

在蘋果公司的內部論壇上有人建議當UISearchDisplayController停用搜索欄的佔位符文本設置爲最後的搜索文本的解決方法。它出現在框中,但它變灰了。不理想,但可能可以接受。

4

阿龍回答工作正常。做事,通過編輯的代碼和平的更簡單的方法:

NSString* searchText = self.searchDisplayController.searchBar.text; 
[self.searchDisplayController setActive:NO animated:NO]; 
self.searchDisplayController.delegate = nil; 
self.searchDisplayController.searchBar.text = searchText; 
self.searchDisplayController.delegate = self; //or any delegate you like! 

這樣一來,沒有您的代理功能會設置搜索欄文本時觸發。

相關問題