如何触发UISearchBar中的取消按钮?

51
如何在程序中触发UISearchBar的取消按钮,就像您点击取消按钮一样?
我在一个UITableView的顶部有一个UISearchBar,在搜索之后,当有人选择一行时,我想在程序中触发UISearchBar中的取消按钮。
编辑:无需用户交互。

你有搜索显示控制器吗? - Martin R
6个回答

69

使用搜索显示控制器的视图控制器,您可以设置

self.searchDisplayController.active = NO;
// or:
[self.searchDisplayController setActive:NO animated:YES];
关闭搜索界面。

哇,谢谢!它起作用了!我只是不知道为什么会被踩,感谢你的关注。 - Marckaraujo

31

对于2014年iOS 8推出的新UISearchController,您可以调用:

[self.searchController setActive:FALSE];
或者
self.searchController.active = FALSE;

(对于动画没有标志,我发现它总是有动画效果。)


我试过了上面的代码。在我找到的演示中似乎工作正常,但是在我的代码中似乎不起作用,你有任何想法吗?目前正在使用self.searchDisplayController?.setActive(false, animated: true)来关闭搜索控制器,但我担心这是一个已废弃的代码。 - vinbhai4u
@vinbhai4u,从你的简短评论很难判断。你应该提交一个新问题,在那里你可以更详细地解释事情。 - Nick
1
如果您不想要动画,可以将其包装在UIView.performWithoutAnimation块中。 - Bruce Geerdes

29

您需要实现UISearchBarDelegate。完成后,请使用:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar

告知委托取消按钮已被点击。

然后使用:

[self searchBarCancelButtonClicked:yourSearchBar];

不,我需要以编程方式完成它。无需用户交互。 - Marckaraujo
使用Swift编程语言self.searchBarCancelButtonClicked(YourSearchBar) - RaviM

6

在iOS 8中,使用UISearchController来实现编程方式的取消按钮操作, 请使用以下方法:

[self.searchController setActive:NO]; 

是的。这个可以触发搜索取消搜索模式。在视图消失事件中,这个调用非常关键,以避免当视图处于搜索模式时出现内存泄漏。否则,视图将无法从内存中释放。 - David.Chu.ca

4

对于Swift 4.2版本,您可以编写以下代码:

searchController?.isActive = false

1
self.navigationItem.searchController?.isActive = false // above iOS 8.0
// or:    
self.searchDisplayController.active = NO; // was deprecated in iOS 8.0
// or:
[self.searchDisplayController setActive:NO animated:YES]; // Obejective-C

这些是完成所述任务的一些变体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接