簡體   English   中英

UISearchController 在關閉時清除 UISearchBar 文本

[英]UISearchController clears UISearchBar text when dismissed

UITableViewController自定義子類的viewDidLoad中,我將navigationItem.titleView設置為UISearchControllersearchBar ,我用nil初始化searchResultsController

當我點擊搜索欄,輸入文本,然后點擊變暗的底層內容時, UISearchController被停用(如預期)並且我輸入的搜索文本被清除(意外)。

當我明確(以編程方式)將搜索控制器設置為非活動狀態時,搜索文本也會被清除(也是意外地)。 為了解決這個問題,我之前存儲了搜索文本,並在關閉搜索控制器后將其設置回來。 雖然hacky,但它有效。

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

當搜索控制器自動關閉時,我嘗試使用UISearchControllerDelegate方法進行類似的操作, willDismissSearchController(_:)搜索文本存儲在willDismissSearchController(_:)並將其設置回didDismissSearchController(_:) 但是,此解決方案仍然顯示搜索文本被清除,然后又恢復到以前的狀態。

當搜索控制器自動關閉時,如何無縫地保持搜索欄文本的原樣?

為了顯式(以編程方式)關閉搜索控制器, UISearchController是一個視圖控制器,因此您可以在其上調用dismiss(animated:completion:)而不是設置isActive = false並重置搜索文本:

searchController.dismiss(animated: true)

搜索欄文本在關閉后仍會保留在搜索欄中。

searchBarTextDidEndEditing(_:) ,將searchBar.text設置回之前的狀態。

請參閱: UISearchBar :如何防止取消按鈕清除文本?

我通過將Apple 的一個示例項目與我自己的項目進行比較來解決了這個問題。 事實證明,您希望在單獨的表視圖控制器中而不是在未過濾的數據中顯示您的結果。 在你初始化你的 UISearchController 之前,設置一個單獨的 TableViewController,當你初始化你的 UISearchController 時,將單獨的表視圖控制器作為searchResultsController:參數searchResultsController:

searchController = UISearchController(searchResultsController: 
                       self.searchResultsController)

然后在updateSearchResults(for:)方法中,我在過濾結果后調用了self.searchResultsController.tableView.reloadData()

這個單獨的視圖控制器將使搜索控制器按照您期望的方式運行。 我知道這不是一個簡單的解決方案。 為了以一種使搜索結果與未過濾數據顯示在同一個表視圖中的方式顯示搜索結果,我不確定 Apple 為什么要這樣設計,但事實就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM