72

这一定是微不足道的,但我找不到你应该如何以编程方式关闭 UISearchController?

请注意,它是新的 UISearchController(2014 年随 iOS 8 推出),而不是 UISearchDisplayController。

到目前为止,这就是我所拥有的

// Dismiss the search tableview
searchController.dismissViewControllerAnimated()
// Clear the Search bar text
searchController.active = false

但我仍然有取消按钮,无法摆脱它。

4

5 回答 5

184

好的,经过更多测试,结果你只需要设置:

searchController.active = false
// or swift 4+
searchController.isActive = false

这是我尝试的第一件事,但我在其中一个不起作用的 UISearchControllerDelegate 方法中调用了它(可能应该用 dispatch_async 调用它(halbano 的答案似乎证实了这一点))。

无论如何,由于我在网上找不到那个答案,我正在回答我自己的问题,我希望它会对某人有所帮助。

于 2015-02-10T17:48:29.310 回答
23

当您在切换到另一个视图后尝试关闭搜索控制器时,您是否遇到过这个问题?我也遇到过这个问题。我想你可能想使用

self.definesPresentationContext = true 

在视图控制器中呈现 UISearchController 根据这篇文章UISearchController not dismissed when View is push。这个对我有用。

于 2015-12-02T06:32:38.750 回答
11

我在导航栏上展示了我的嵌入。对我有用的代码是:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.searchController setActive:NO];
        self.navigationController.navigationBar.topItem.title = @"MYTITLE".uppercaseString;
        self.navigationItem.titleView = nil;
    });
}

希望它可以帮助某人。

于 2015-12-12T23:19:28.590 回答
7

斯威夫特 4+

searchController.isActive = false
于 2018-03-02T13:10:38.660 回答
1

我使用搜索和交互控制器遇到了这个问题,只需包含以下行即可解决: self.dismissViewControllerAnimated(false, completion: nil)

打开交互并清除搜索而不更改委托。

于 2016-10-27T13:18:34.500 回答