超出范围时 UISearchController 未正确关闭 [重复]

Posted

技术标签:

【中文标题】超出范围时 UISearchController 未正确关闭 [重复]【英文标题】:UISearchController not properly dismissing when going out of scope [duplicate] 【发布时间】:2015-05-14 22:26:04 【问题描述】:

我正在将搜索功能构建到我的应用程序中,该应用程序主要由 UITableViews 组成。我已经成功添加了一个搜索栏,并且可以正确搜索项目,但是当我设置controller.dimsBackgroundDuringPresentation = false 时,事情变得很奇怪。问题是,我确实希望这个布尔值是假的,因为用户应该能够滚动浏览结果并选择一个结果以查看更多详细信息。

我看到的行为如下:搜索栏永远不会自行消失,除非您按下 Cancel 按钮,这意味着当我在表格视图中选择一个单元格以显示该单元格的详细信息时,搜索栏会延续到该视图中,如下所示:

我按如下方式初始化我的搜索控制器:

 self.searchController = (
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.hidesNavigationBarDuringPresentation = false
        controller.searchBar.searchBarStyle = .Minimal
        controller.delegate = self
        
        self.tableView?.tableHeaderView = controller.searchBar
        return controller;
    )()

虽然搜索本身有效(updateSearchResultsForSearchController 被调用,我应用搜索并返回一个数组等),但我似乎无法以任何方式使用搜索,因为如果我在搜索时选择了一个单元格,上面的图片发生了,但是如果我按取消,那么我的搜索就会被清除。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您应该在viewDidLoad() 中添加以下行

definesPresentationContext = true

详见文档:definesPresentationContext

【讨论】:

以上是关于超出范围时 UISearchController 未正确关闭 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS8 中实现 UISearchController?

如何在 UISearchController 中使用范围栏

如何在嵌入 UINavigationController 的 UISearchController 中添加范围按钮

显示和隐藏 uisearchcontroller 时调用的函数

如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?

当变量超出范围时会发生啥?