ios – UISearchController在被解雇时清除UISearchBar文本

在我的UITableViewController的自定义子类的viewDidLoad中,我将navigationItem.titleView设置为UISearchController的searchBar,我使用nil为searchResultsController初始化.

当我点击搜索栏,输入文本,然后点击暗淡的底层内容,然后UISearchController被取消激活(按预期),我输入的搜索文本被清除(意外).

当我明确地(以编程方式)将搜索控制器设置为非活动状态时,也会清除搜索文本(也会意外).为了解决这个问题,我先将搜索文本存储起来,然后在解除搜索控制器后将其设置回来.虽然hacky,但它确实有效.

let searchText = searchBar.text // #hack
searchController.isActive = false
searchBar.text = searchText     // #hack

当搜索控制器被自动关闭时,我尝试使用UISearchControllerDelegate方法进行类似的操作,即将搜索文本存储在willDismissSearchController(_ :)中并将其设置回didDismissSearchController(_ :).但是,这个解决方案仍然显示搜索文本被清除,然后恢复到以前的状态.

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

最佳答案 在searchBarTextDidEndEditing(_ :)中,将searchBar.text设置回原来的状态.

见:UISearchBar : How to prevent Cancel Button from clearing text?

点赞