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 小时调试的成果。
我在使用UISearchController
和UITabBarController
时遇到了多个问题,即:
这个,这就是 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,UI 在关闭时行为不端