到了iOS8,苹果废除UISearchDisplayController,建议我们使用UISearchController配合UITableView来实现。我们可以把搜索
条放在表格头部,或者放在页面顶部,还是很灵活的。下面通过代码演示如何使用UISearchController实现具有搜索功能的表格。
NS_CLASS_DEPRECATED_IOS(3_0, 8_0, “UISearchDisplayController has been replaced with UISearchController”)
效果图_使用UISearchController实现带搜索栏的表格
效果图_在表格头部添加一个带范围选择(scope bar)的搜索栏
1. initWithSearchResultsController
1. 在初始化UISearchController,它要求我们要先设计好的searchResultsController这个控制器,它可以是UITableViewController,也可以是UICollectionViewController,也可以是nil。
2. 如果设为nil的话,那数据源和搜索结果共用一个Controller。
2. dimsBackgroundDuringPresentation 设置开始搜索时背景是否显示
3. hidesNavigationBarDuringPresentation 设置开始搜索时导航条是否隐藏
4. searchResultsUpdater
这个方法很重要,当searchBar的字符内容改变时系统回调,我们一般在这里查找符合条件的搜索结果。
代码
//搜索控制器
var countrySearchController = UISearchController()
override func viewDidLoad() {
super.viewDidLoad()
//配置搜索控制器
self.countrySearchController = {
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
// 设置开始搜索时导航条是否隐藏
controller.hidesNavigationBarDuringPresentation = true
// 设置开始搜索时背景是否显示
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.searchBarStyle = .Minimal
controller.searchBar.placeholder = "请输入学校名称"
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
}()
}
extension ViewController: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
}
}
5. NSPredicate
搜索过程中一般使用NSPredicate。
谓词中SELF代表被查询的集合。这句谓词的意思是查找集合中包含搜素字符串的数据。
extension ViewController: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
self.searchArray.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let arry = (self.schoolArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.searchArray = arry as! [String]
}
}
UISearchControllerDemo 我放到网盘上了。https://pan.baidu.com/s/1pLap5Ir
我写了两篇Demo,使用UISearchController实现带搜索栏的表格 和 在表格头部添加一个带范围选择(scope bar)的搜索栏
原文出自:www.hangge.com