UISearchController在关闭时清除UISearchBar文本

ma1*_*w28 5 uikit uisearchbar ios uisearchcontroller

viewDidLoad我的自定义子类的UITableViewController,我已经设置navigationItem.titleViewsearchBarUISearchController,我与初始化nilsearchResultsController

当我点击搜索栏时,输入文本,然后点击暗淡的基础内容,然后UISearchController将停用(按预期方式),并且清除输入的搜索文字(出乎意料)。

当我明确地(以编程方式)将搜索控制器设置为非活动状态时,搜索文本也被清除(也意外地)。为了解决这个问题,我先存储了搜索文本,然后在关闭搜索控制器后将其重新设置。尽管很hack,但它可以工作。

let searchText = searchBar.text // #hack
searchController.isActive = false
searchBar.text = searchText     // #hack
Run Code Online (Sandbox Code Playgroud)

对于自动关闭搜索控制器的情况,我尝试使用UISearchControllerDelegate方法进行类似的操作,即将搜索文本存储在中willDismissSearchController(_:)并将其重新设置为didDismissSearchController(_:)。但是,此解决方案仍显示已清除搜索文本,然后将其设置回之前的状态。

自动关闭搜索控制器后,如何无缝保留搜索栏文本?

Bry*_*uby 6

为了显式(以编程方式)关闭搜索控制器,UISearchController它是一个视图控制器,因此您可以只调用dismiss(animated:completion:)它而不是设置isActive = false和重置搜索文本:

searchController.dismiss(animated: true)
Run Code Online (Sandbox Code Playgroud)

关闭后,搜索栏文本仍将保留在搜索栏中。


ma1*_*w28 1

searchBarTextDidEndEditing(_:),恢复searchBar.text到之前的状态。

请参阅:UISearchBar:如何防止取消按钮清除文本?