如何以编程方式解雇UISearchBar?

时间:2010-09-09 17:49:02

标签: iphone cocoa-touch

我有一个标准的表视图,通过NIB实现了UISearchController。我想模仿当用户点击搜索栏中的“取消”时会发生什么 - 正常的行为是搜索栏消失并且表格返回其原始状态。基本上,当用户选择显示在搜索结果中的项目时,我希望发生同样的事情。

我找不到随时当用户点击“取消”时会发生什么的过程。

4 个答案:

答案 0 :(得分:129)

这是一个古老的问题,但我只是反对这一两个小时,最后想出来,所以我想我会分享后代。起初我尝试做一些事情,例如手工辞职第一响应者/删除搜索文本/等,但在这个视图中我希望用户能够多次使用搜索栏,手动操作意味着搜索栏会每次用户再次开始编辑时都必须重新设置 - 似乎是错误的方法。这是我做的:

我已经在Interface Builder中添加了带有可选搜索显示控制器的搜索栏。在我的实现中,我设置了一个UISearchDisplayController IBOutlet,然后使用IB将其链接到搜索显示控制器。最后,在我想要关闭搜索栏的地方,我只需要打电话:

[mySearchController setActive:NO];

像魅力一样!

答案 1 :(得分:6)

通常,searchBarCancelButtonClicked:方法看起来像这样:

yourSearchBar.text = @"";
[yourTableView reloadData];
[yourSearchBar resignFirstResponder];

答案 2 :(得分:5)

以下是我在几个小时的实验后如何解决这个问题=)

for(UIView *subView in self.searchDisplayController.searchBar.subviews){
    if([subView isKindOfClass:UIButton.class])
    {
        UIButton *cancelButton = (UIButton*)subView;
        [cancelButton sendActionsForControlEvents: UIControlEventTouchUpInside];
        break;
    } 
}

答案 3 :(得分:4)

设置为活动状态也清除了我的UISearchBar文本,因此我的数据项数组将被清除,因此这对我有用:

self.searchController.dismissViewControllerAnimated(true, completion: nil)

这清除了UIDimmingView并单独留下了我的搜索文本 - 完全符合我的情况。