我使用UISearchController在iOS 9中測試了以下內容。
默認情況下,只要UISearchBar中沒有文本,所顯示的表就會是您的原始表格視圖(從現在開始稱爲originalTableView)。根據dimsBackgroundDuringPresentation
的值,這可能有也可能沒有黑色透視層。
一旦用戶輸入任何文本到的UISearchBar,新表視圖的內容將被顯示(I將把這個作爲searchTableView)。
請注意,在這兩種解決方案中,我都以類似於Apple在this example中這樣做的方式實現了UISearchController;即有兩個單獨的UITableViewController負責顯示數據。
解決方案1:複雜的實現,平滑的動畫
對於平滑的動畫:
- 貫徹UISearchControllerDelegate的willPresentSearchController和willDismissSearchController方法。
- 在willPresent中,更新您的originalTableView的數據以準備好顯示您想要的任何零文本數據,然後致電
reloadData()
。
- 在willDismiss中,恢復過程以顯示原始內容並致電
reloadData()
。
實施例:
// here tableView refers to originalTableView
extension ViewController: UISearchControllerDelegate {
func willPresentSearchController(searchController: UISearchController) {
data = ["A", "B", "C"]
tableView.reloadData()
}
func willDismissSearchController(searchController: UISearchController) {
data = ["a", "b", "c"]
tableView.reloadData()
}
}
在這個虛構的例子中,數據被顯示爲a,b,c
當用戶沒有集中在的UISearchBar,但一旦使用者輕按的UISearchBar顯示爲A,B,C
。
解決方案2:快速實施,波濤洶涌的動畫
無需實現在這兩個originalTableView和searchTableView搜索控制器的邏輯,你可以使用這個解決方案簡單地顯示searchTableView即使它被隱藏默認。
很可能,您已經實施了UISearchResultsUpdating協議。通過在該方法中簡單地調用tableView.hidden = false
,您應該獲得您之後的行爲;儘管它的動畫不如恆星。
// here tableView refers to searchTableView
extension SearchViewController: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
tableView.hidden = false
filterData(text: searchController.searchBar.text!)
tableView.reloadData()
}
}
3班輪!當然,這是大約40行和很多閱讀,直到我找出了那個UISearchDisplayController發生了什麼。好問題,我喜歡學習iOS這樣的小挑戰。 – 2012-03-01 18:38:29
看到這個鏈接 http://stackoverflow.com/a/21344947/747719 這是一個回車的解決方案。 – kapukinz 2014-01-25 00:33:14