版本:iOS 8.0
UISearchController的searBar必须设置为tableView的headerView,而且他虽然是控制器,但是不能modal,也不能push出来,他有一个属性isActive,设置他即可便捷的展示和消失。
//创建 var searchVC = UISearchController(searchResultsController: nil) //这里传空即可 Pass nil if you wish to display search results in the same view that you are searching tableView.tableHeaderView = searchVC.searchBar //设置searchBar的样式,默认为灰色背景,虽然searbar可以设置背景但是在这里容易失效,建议通过样式设置实现 searchVC.searchBar.searchBarStyle = .minimal searchVC.searchBar.backgroundColor = UIColor.white //searchBar大小自适应 searchVC.searchBar.sizeToFit() //搜索时,背景是否变暗,添加一层蒙版 searchVC.dimsBackgroundDuringPresentation = false //表示该视图控制器的视图是否被覆盖时,视图控制器或它的子类提供了一个视图控制器 searchVC.definesPresentationContext = true //搜索输入改变更新到哪里 searchVC.searchResultsUpdater = self searchVC.searchBar.delegate = self searchVC.searchBar.placeholder = "占位文字" //控制器出现时立即变为编辑状态 searchVC.searchBar.becomeFirstResponder() //设置搜索取消按钮 searchVC.searchBar.setShowsCancelButton(true, animated: false) //定制取消按钮(文字、颜色、字体) if let cancleButton = searchVC.searchBar.value(forKey: "cancelButton") as? UIButton { cancleButton.setTitle("取消", for: .normal) cancleButton.titleLabel?.font = Font(16) cancleButton.setTitleColor(UIColor.red, for: .normal) } //展示控制器 searchVC.isActive = true//代理方法extension ViewController: UISearchResultsUpdating, UISearchBarDelegate { //UISearchResultsUpdating func updateSearchResults(for searchController: UISearchController) { //输入改变,包括输入框显示状态改变 } //UISearchBarDelegate func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { //取消按钮点击 } func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { //搜索按钮点击 } func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { //输入文字改变 } }
具体数据的展示,需要根据代理事件更新搜索结果,tableView显示