如何以编程方式closuresUISearchBar?

我有一个标准的表视图,通过一个NIB实现的UISearchController。 我想模仿用户在search栏中单击“取消”时发生的情况 – 正常的行为是search栏消失,表格返回到原始状态。 基本上,当用户select出现在他们的search结果中的项目时,我想要发生同样的情况。

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

这是一个古老的问题,但是我只是在一两个小时内反对这个问题,终于搞清楚了,所以我想我会分享后代。 起初,我试图做一些事情,例如辞职的第一响应者/删除search文本/等,但在这个观点,我希望用户能够可能多次使用search栏,手动做事意味着search栏会每次用户再次开始编辑时都必须重新设置 – 看起来像是错误的方法。 以下是我所做的:

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

[mySearchController setActive:NO]; 

奇迹般有效!

通常,searchBarCancelButtonClicked:方法如下所示:

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

这是几个小时的实验后,我怎么解决这个问题=)

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

设置活动也清除了我的UISearchBar文本,所以我的数据项的数组将被清除,因此这工作对我来说:

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

这清除了UIDimmingView并留下我的search文本 – 在我的情况下完美。