2011-03-15 61 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! 

这样一来,没有您的代理功能会设置搜索栏文本时触发。

相关问题