我在我的应用中使用了UISearchDisplayController。当用户选择返回的搜索结果中的项目时,我将停用UISearchDisplayController。取消激活控制器会清除用户键入的文本。我想把它留在那里。我可以通过在取消激活控制器后再次设置它来强制文本回到UISearchBar。
像这样:
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变为活动状态?有什么其他建议来解决这种行为吗?
答案 0 :(得分:10)
对于其他任何想知道如何做到这一点的人,我设法通过在我的代表中添加它来实现它:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
if(!controller.isActive){
controller.searchResultsTableView.hidden = YES;
return NO;
}
controller.searchResultsTableView.hidden = NO;
[....]
return YES;
}
答案 1 :(得分:6)
亚伦的回答很好。通过编辑代码的和平,一种更简单的做事方式:
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!
这样,在设置搜索栏文本时,不会触发任何代理功能。
答案 2 :(得分:3)
在Apple的内部论坛中,有人提出了一种解决方法,即在UISearchDisplayController停用时将searchBar的占位符文本设置为最后一个搜索文本。它出现在框中,但它是灰色的。不理想,但可能是可以接受的。