我使用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