UISearchController 在点击取消按钮时关闭 VC

Posted

技术标签:

【中文标题】UISearchController 在点击取消按钮时关闭 VC【英文标题】:UISearchController dismisses VC upon hitting cancel button 【发布时间】:2015-05-05 18:07:18 【问题描述】:

所以,我目前正在尝试用 UISearchController 替换我的一个项目中贬低的 searchDisplayController,我遇到了这个问题。

如果搜索中没有结果(UITableView 为空),则整个 ViewController 将被关闭。当搜索结果不为空时,不会发生这种情况。我不想说清楚我没有使用 UITableViewController。相反,我有一个普通的 VC,里面有一个 UITableView。

这是我的一些代码:

var resultSearchController = UISearchController()
override func viewDidLoad() 
    super.viewDidLoad()
    self.resultSearchController = (
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.delegate = self
        controller.searchBar.delegate = self
        self.studentTable.tableHeaderView = controller.searchBar
        return controller
    )()
    ....

现在,如果我将此函数添加到等式中,取消按钮总是会关闭 VC。

func searchBarCancelButtonClicked(searchBar: UISearchBar) 
    resultSearchController.active = false

那么为什么设置searchController.active = false 会关闭VC?是不是因为它使用了和 VC 一样的 UITableView?我相信旧的 searchDisplayController 只会在正在使用的那个上显示一个 UITableView。如果是这种情况,有没有办法覆盖dismissVC?

【问题讨论】:

当您没有将行设置active 包含到false 并且您点击取消按钮时会发生什么? 当它不包括在内时,它只会在没有搜索结果时关闭 VC,如问题所述。如果它被包含,那么它总是在点击取消按钮时执行。 当没有搜索结果时关闭,或者当没有搜索结果并且您点击取消时关闭? 没有搜索结果,您点击取消。有什么想法吗? 找到this very thorough resource。也许definesPresentationContext = true 是关键。 【参考方案1】:

这也发生在我身上。我解决它的方法是替换:

   resultSearchController.active = false

    resultSearchController.searchBar.text = ""
    resultSearchController.searchBar.resignFirstResponder()

希望对你有帮助:-)

【讨论】:

此解决方案使 searchController 仍然处于活动状态,这意味着,如果您已将 SearchBar 附加到启用了下拉刷新的 tableview,则刷新指示器将不可见;作为替代解决方法,从 superview 中删除现有的 searchBar 并创建新的并将其附加到 tableview。【参考方案2】:

2018 只想分享我 1-2 小时调试的成果。

我在使用UISearchControllerUITabBarController 时遇到了多个问题,即:

    这个,这就是 OP 的问题。点击取消按钮会关闭显示 searchController 的屏幕。

    标签(或屏幕)变黑,Tab Bar and UISearchController giving black screen

    ios 10、11和12中UINavigationController导航栏的标题视图中使用UISearchController,就像这个问题。 UISearchBar increases navigation bar height in iOS 11

对于 #3 的解决方案,因为我们已经在这里:https://***.com/a/53264329/3231194

最后,我一直看到的唯一解决方案是添加以下代码:

self.definesPresentationContext = true

问题是我把它放在了错误的函数中。

请记住,该解决方案解决了我遇到的 #1 和 #2 问题。不多也不少。

在哪里添加?viewDidAppear 中。就是这样!

【讨论】:

以上是关于UISearchController 在点击取消按钮时关闭 VC的主要内容,如果未能解决你的问题,请参考以下文章

按下取消按钮时如何防止 UISearchController 关闭?

UISearchController 中的取消按钮在 iOS 13 中没有正确消失

UISearchController 中的取消按钮

带有大标题的 UISearchController,UI 在关闭时行为不端

iOS UISearchController:等到 UISearchController 在取消搜索后被解除

UISearchController禁用取消按钮[重复]