如何以编程方式解雇UISearchBar?

Phi*_*ott 38 iphone cocoa-touch

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

当用户点击"取消"时,我找不到任何地方的过程.

小智 130

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

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

[mySearchController setActive:NO];
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!

  • 还有一个setActive:animated:variant,它更适合我的情况.谢谢! (24认同)
  • 这似乎只是清除搜索文本并隐藏当前结果,但保持搜索字段集中并处于搜索模式,至少在iOS 7下. (2认同)

小智 5

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

yourSearchBar.text = @"";
[yourTableView reloadData];
[yourSearchBar resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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