AZSearchView
Swift 3 书写的具有自动完成建议的搜索控制器。
安装
pod 'AZSearchView'
用法
创建一个类型为 AZSearchViewController
的属性和一个用于存储数据的字符串数组。
var searchController: AZSearchViewController!
var resultArray:[String] = []
实现代理和数据源协议
extension ViewController: AZSearchViewDelegate{
func searchView(_ searchView: AZSearchViewController, didSearchForText text: String) {
searchView.dismiss(animated: false, completion: nil)
}
func searchView(_ searchView: AZSearchViewController, didTextChangeTo text: String, textLength: Int) {
self.resultArray.removeAll()
if textLength > 3 {
for i in 0..<arc4random_uniform(10)+1 {self.resultArray.append("\(text) \(i+1)")}
}
searchView.reloadData()
}
func searchView(_ searchView: AZSearchViewController, didSelectResultAt index: Int, text: String) {
searchView.dismiss(animated: true, completion: {
self.pushWithTitle(text: text)
})
}
}
extension ViewController: AZSearchViewDataSource{
func results() -> [String] {
return self.resultArray
}
}
现在初始化控制器对象
override func viewDidLoad() {
super.viewDidLoad()
self.searchController = AZSearchViewController()
self.searchController.delegate = self
self.searchController.dataSource = self
}
最后,在需要时进行显示
searchController.show(in: self)
自定义
默认与自定义
self.searchController.searchBarPlaceHolder = "Search Top Artists"
self.searchController.navigationBarClosure = { bar in
//The navigation bar's background color
bar.barTintColor = #colorLiteral(red: 0.9019607843, green: 0.2235294118, blue: 0.4, alpha: 1)
//The tint color of the navigation bar
bar.tintColor = UIColor.lightGray
}
self.searchController.searchBarBackgroundColor = .white
self.searchController.statusBarStyle = .lightContent
self.searchController.keyboardAppearnce = .dark
let item = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(ViewController.close(sender:)))
item.tintColor = .white
self.searchController.navigationItem.rightBarButtonItem = item
通过实现这些可选的代理/数据源方法
extension ViewController: AZSearchViewDelegate{
func searchView(_ searchView: AZSearchViewController, tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
}
extension ViewController: AZSearchViewDataSource{
func searchView(_ searchView: AZSearchViewController, tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: searchView.cellIdentifier)
cell?.textLabel?.text = self.resultArray[indexPath.row]
cell?.imageView?.image = #imageLiteral(resourceName: "ic_history").withRenderingMode(.alwaysTemplate)
cell?.imageView?.tintColor = UIColor.gray
cell?.contentView.backgroundColor = .white
return cell!
}
func searchView(_ searchView: AZSearchViewController, tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func searchView(_ searchView: AZSearchViewController, tableView: UITableView, editActionsForRowAtIndexPath indexPath: IndexPath) -> [UITableViewRowAction]? {
let remove = UITableViewRowAction(style: .destructive, title: "Remove") { action, index in
self.resultArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
remove.backgroundColor = #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1)
return [remove]
}
}