记录下UISearchBar的基本用法,补充:ios 8.0以后,原来的UISearchDisplayController被官方废弃,建议使用UISearchController,下面就简单的记录下这两种控件的使用。
1,UISearchBar,代码如下:
a,声明
class NinethViewController: UIViewController,UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource
b,准备,创建所需要的变量
var searchBar:UISearchBar! var hTabV:UITableView! var ctrls:[String] = ["a","b","c","d","e"] var ctrlsel:[String] = []
c,具体方法和代理方法的实现
func creatUI(){ self.ctrlsel = self.ctrls self.searchBar = UISearchBar(frame:CGRect(x:0,y:64,width:kScreenWidth,height:50)) self.searchBar.delegate = self // self.searchBar.setShowsCancelButton(true, animated: true) // self.searchBar.showsSearchResultsButton = true self.searchBar.placeholder = "请输入你想搜索的内容" // self.searchBar.showsCancelButton = false self.view.addSubview(self.searchBar) self.hTabV = UITableView(frame:CGRect(x:0,y:50+64,width:kScreenWidth,height:kScreenHeight-50)) self.hTabV.delegate = self self.hTabV.dataSource = self self.hTabV.tableFooterView = UIView() self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell") self.view.addSubview(self.hTabV) }
补充,Options属性,可设置如下功能样式:
showsSearchResultsButton 搜索框右边显示一个圆形向下的按钮,单机会发送特殊事件
showsBookmarkButton 搜索框右边会显示一个书本的按钮,单机会发送特殊事件
showsCancelButton 搜索框右边会出现一个“cancel”按钮,单击会发送特殊事件
isSearchResultsButtonSelected 搜索结果按钮被选中
showsSearchResultsButton 搜索结果显示按钮
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { print(searchText) // 没有搜索内容时显示全部组件 if searchText == "" { self.ctrlsel = self.ctrls }else{ self.ctrlsel = [] for ctrl in self.ctrls { if ctrl.uppercased().hasPrefix(searchText.uppercased()) { self.ctrlsel.append(ctrl) } } } self.searchBar.endEditing(true) self.hTabV.reloadData() }
c,tableview具体代理方法的实现:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.ctrlsel.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let identiferStr:String = "cell" let cell = tableView.dequeueReusableCell(withIdentifier: identiferStr, for: indexPath) cell.textLabel?.text = "\(self.ctrlsel[indexPath.row])" cell.accessoryType = .disclosureIndicator return cell }
效果如下:
2,UISearchController的使用
func creatUIs(){ self.searchBar = UISearchBar(frame:CGRect(x:0,y:0,width:kScreenWidth,height:50)) self.searchBar.showsCancelButton = true //通过参数searchResultsController传nil来初始化UISearchController,意思是我们告诉search controller我们会用相同的视图控制器来展示我们的搜索结果,如果我们想要指定一个不同的view controller,那就会被替代为显示搜索结果。 searchController = UISearchController(searchResultsController:nil) //设置代理,searchResultUpdater是UISearchController的一个属性,它的值必须实现UISearchResultsUpdating协议,这个协议让我们的类在UISearchBar文字改变时被通知到,我们之后会实现这个协议。 searchController.searchResultsUpdater = self as? UISearchResultsUpdating //默认情况下,UISearchController暗化前一个view,这在我们使用另一个view controller来显示结果时非常有用,但当前情况我们并不想暗化当前view,即设置开始搜索时背景是否显示 searchController.dimsBackgroundDuringPresentation = false //设置默认显示内容 searchController.searchBar.placeholder = "Search here..." //设置searchBar自适应大小 searchController.searchBar.sizeToFit() //设置默认显示内容 searchController.searchBar.delegate = self //设置definesPresentationContext为true,我们保证在UISearchController在**状态下用户push到下一个view controller之后search bar不会仍留在界面上。 searchController.definesPresentationContext = true self.hTabV = UITableView(frame:CGRect(x:0,y:0,width:kScreenWidth,height:kScreenHeight)) self.hTabV.delegate = self self.hTabV.dataSource = self self.hTabV.tableFooterView = UIView() self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell") //设置tableview的头视图为searchController.searchBar self.hTabV.tableHeaderView = searchController.searchBar self.view.addSubview(self.hTabV) }
其他的searchbar的代理方法和tableview的代理方法,和上面的一样!
效果如下图:
请发表评论