你如何解除 UISearchController ? (iOS 8 及以下)

Posted

技术标签:

【中文标题】你如何解除 UISearchController ? (iOS 8 及以下)【英文标题】:How do you dismiss a UISearchController ? (iOS 8 and follow) 【发布时间】:2015-02-10 17:48:29 【问题描述】:

这一定很简单,但我找不到您应该如何以编程方式关闭 UISearchController?

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

这确实有效!我知道只是更改变量实际上会触发 UI 重绘,但它可以工作 @Bhargav 很可能是因为正在进行一些 KVO(键值观察) 另外它调用UISearchControllerDelegatedidDismissSearchController(searchController)方法。【参考方案2】:

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

self.definesPresentationContext = true 

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

【讨论】:

【参考方案3】:

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

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

希望对某人有所帮助。

【讨论】:

不是确切的代码,但调度异步为我指明了正确的方向! 好!还要让主线程来处理 UI 元素是强制性的,也许这就是魔法。 @halbano 这个委托方法在主线程上被调用。我相信搜索栏动画与听众在这里所做的任何事情之间存在串扰,这是冲突的原因。这将在下一个运行循环中执行响应代码。【参考方案4】:

SWIFT 4+

searchController.isActive = false

【讨论】:

【参考方案5】:

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

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

【讨论】:

问题是这不会触发像willDismissSearchController这样可能是必要的委托函数。

以上是关于你如何解除 UISearchController ? (iOS 8 及以下)的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 在解除 UISearchController 时覆盖 UITableView

你如何使用 Storyboards 引用 UISearchController

UISearchController - 警告尝试加载视图控制器的视图

iOS UISearchController Class Reference

如何隐藏弹出的 UISearchController

如何下移 UISearchController?