你如何关闭 UISearchController ? (iOS 8 和跟随)

How do you dismiss a UISearchController ? (iOS 8 and follow)

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

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

到目前为止,这是我得到的

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

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

好的,经过更多测试后,您只需设置:

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

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

无论如何,因为我在网上找不到那个答案,所以我正在回答我自己的问题,我希望它能帮助别人。

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

self.definesPresentationContext = true 

在根据此 post 呈现 UISearchController 的视图控制器中。它对我有用。

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

- (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;
    });
}

希望对大家有所帮助。

我在使用搜索和交互控制器时遇到了这个问题,只包含以下行后就解决了: self.dismissViewControllerAnimated(假,完成:无)

在不更改委托的情况下打开交互并清除搜索。

SWIFT 4+

searchController.isActive = false