本篇博客的语法适用于Swift3.0以上。
UISearchBar是一个苹果自带的搜索条,由一个文本框和几个按钮组成,当用户在文本框内输入部分内容之后,程序即可按照指定的规则执行搜索。
下面是UISearchBar的长相:
//@H_301_8@
// ViewController.swift@H_301_8@
// UISearchBarTest@H_301_8@
//@H_301_8@
// Created by Mac on 2017/8/4.@H_301_8@
// Copyright © 2017年 Jing. All rights reserved.@H_301_8@
//@H_301_8@
import UIKit
class ViewController: UIViewController@H_301_8@,UITableViewDelegate@H_301_8@,UITableViewDataSource@H_301_8@,UISearchBarDelegate {
var tableArray: NSArray@H_301_8@ = ["UI"@H_301_8@,"UIView"@H_301_8@,"View"@H_301_8@,"ViewController"@H_301_8@,"Controller"@H_301_8@,"UIViewController"@H_301_8@,"Search"@H_301_8@,"UISearchBar"@H_301_8@,"Swift"@H_301_8@]
var searchArray: NSArray@H_301_8@ = []
var isSearch = false@H_301_8@//默认在非搜索状态下@H_301_8@
override func viewDidLoad() {
super@H_301_8@.viewDidLoad@H_301_8@()
// Do any additional setup after loading the view,typically from a nib.@H_301_8@
self@H_301_8@.tableView@H_301_8@.tableHeaderView@H_301_8@ = self@H_301_8@.searchBar@H_301_8@;
self@H_301_8@.view@H_301_8@.addSubview@H_301_8@(tableView);
}
override func didReceiveMemoryWarning() {
super@H_301_8@.didReceiveMemoryWarning@H_301_8@()
// Dispose of any resources that can be recreated.@H_301_8@
}
//使用懒加载方式来创建UITableView@H_301_8@
lazy var tableView: UITableView@H_301_8@ = {
let tempTableView = UITableView@H_301_8@ (frame: self@H_301_8@.view@H_301_8@.bounds@H_301_8@,style: UITableViewStyle.plain@H_301_8@)
tempTableView.delegate@H_301_8@ = self@H_301_8@
tempTableView.dataSource@H_301_8@ = self@H_301_8@
tempTableView.tableFooterView@H_301_8@ = UIView@H_301_8@.init@H_301_8@()
return@H_301_8@ tempTableView
}()
//使用懒加载方式来创建UISearchBar@H_301_8@
lazy var searchBar: UISearchBar@H_301_8@ = {
let tempSearchBar = UISearchBar@H_301_8@(frame:CGRect@H_301_8@(x: 0@H_301_8@,y: 64@H_301_8@,width: self@H_301_8@.view@H_301_8@.bounds@H_301_8@.size@H_301_8@.width@H_301_8@,height: 40@H_301_8@))
// tempSearchBar.prompt = "查找图书";@H_301_8@
tempSearchBar.placeholder@H_301_8@ = "请输入搜索关键字"@H_301_8@;
tempSearchBar.showsCancelButton@H_301_8@ = true@H_301_8@;
tempSearchBar.delegate@H_301_8@ = self@H_301_8@
return@H_301_8@ tempSearchBar
}()
//根据输入的关键字来过滤搜索结果@H_301_8@
func filterBySubstring(filterStr: NSString@H_301_8@!) {
isSearch = true@H_301_8@
let predicate = NSPredicate(format: "SELF CONTAINS[c] %@"@H_301_8@,filterStr)
searchArray = tableArray.filtered@H_301_8@(using: predicate) as NSArray@H_301_8@
tableView.reloadData@H_301_8@()
}
//MARK: UITableViewDelegate@H_301_8@
func numberOfSections(in tableView: UITableView@H_301_8@) -> Int {
return@H_301_8@ 1@H_301_8@
}
func tableView(_ tableView: UITableView@H_301_8@,numberOfRowsInSection section: Int) -> Int {
if@H_301_8@ isSearch {
return@H_301_8@ searchArray.count@H_301_8@
}
else@H_301_8@{
return@H_301_8@ tableArray.count@H_301_8@
}
}
func tableView(_ tableView: UITableView@H_301_8@,cellForRowAt indexPath: IndexPath) -> UITableViewCell@H_301_8@ {
let identifier = "cellId"@H_301_8@
var cell = tableView.dequeueReusableCell@H_301_8@(withIdentifier: identifier)
if@H_301_8@ cell == nil@H_301_8@ {
cell = UITableViewCell@H_301_8@.init@H_301_8@(style: UITableViewCellStyle.default@H_301_8@,reuseIdentifier: identifier)
}
let row = indexPath.row@H_301_8@
if@H_301_8@ isSearch {
cell?.textLabel@H_301_8@?.text@H_301_8@ = searchArray[row] as? String
}
else@H_301_8@{
cell?.textLabel@H_301_8@?.text@H_301_8@ = tableArray[row] as? String
}
return@H_301_8@ cell!
}
//MARK: UISearchBarDelegate@H_301_8@
func searchBarCancelButtonClicked(_ searchBar: UISearchBar@H_301_8@) {
isSearch = false@H_301_8@
searchBar.resignFirstResponder@H_301_8@()
tableView.reloadData@H_301_8@()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar@H_301_8@) {
filterBySubstring(filterStr: searchBar.text@H_301_8@! as NSString@H_301_8@)
}
func searchBar(_ searchBar: UISearchBar@H_301_8@,textDidChange searchText: String) {
filterBySubstring(filterStr: searchText as NSString@H_301_8@)
}
}