在storyboard中拖TableView和Search bar到控件中,并和ViewController进行关联。
import UIKit
class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate{
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var ctrls = ["A","b","C","D"]
var content:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
self.content = self.ctrls
self.searchBar.delegate = self
self.tableView.delegate = self
self.tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.content.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let id = "id"
var cell = tableView.dequeueReusableCell(withIdentifier: id)
if cell == nil{
cell = UITableViewCell(style: .default, reuseIdentifier: id)
}
cell?.textLabel?.text = self.content[indexPath.row]
cell?.accessoryType = .disclosureIndicator
return cell!
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText == ""{
self.content = self.ctrls
}
else{
self.content = []
for i in self.ctrls{
//判断i的前缀是否有搜索的前缀
if i.lowercased().hasPrefix(searchText.lowercased()){
self.content.append(i)
}
}
}
self.tableView.reloadData()
}
}
SearchController使用
实时更新
在ViewController文件中:
import UIKit
class ViewController: UIViewController {
//展示列表
var tableView: UITableView!
//搜索控制器
var countrySearchController = UISearchController()
//原始数据集
let schoolArray = ["清华大学","北京大学","中国人民大学","北京交通大学","北京工业大学",
"北京航空航天大学","北京理工大学","北京科技大学","中国政法大学",
"中央财经大学","华北电力大学","北京体育大学","上海外国语大学","复旦大学",
"华东师范大学","上海大学","河北工业大学"]
//搜索过滤后的结果集
var searchArray:[String] = [String](){
didSet {self.tableView.reloadData()}
}
override func viewDidLoad() {
super.viewDidLoad()
//创建表视图
let tableViewFrame = CGRect(x: 0, y: 20, width: self.view.frame.width,
height: self.view.frame.height-20)
self.tableView = UITableView(frame: tableViewFrame, style:.plain)
self.tableView!.delegate = self
self.tableView!.dataSource = self
//创建一个重用的单元格
self.tableView!.register(UITableViewCell.self,
forCellReuseIdentifier: "MyCell")
self.view.addSubview(self.tableView!)
//配置搜索控制器
self.countrySearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self //两个样例使用不同的代理
controller.hidesNavigationBarDuringPresentation = false
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.searchBarStyle = .minimal
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
在ViewControllerExtension文件中:
import UIKit
class ViewController: UIViewController {
//展示列表
var tableView: UITableView!
//搜索控制器
var countrySearchController = UISearchController()
//原始数据集
let schoolArray = ["清华大学","北京大学","中国人民大学","北京交通大学","北京工业大学",
"北京航空航天大学","北京理工大学","北京科技大学","中国政法大学",
"中央财经大学","华北电力大学","北京体育大学","上海外国语大学","复旦大学",
"华东师范大学","上海大学","河北工业大学"]
//搜索过滤后的结果集
var searchArray:[String] = [String](){
didSet {self.tableView.reloadData()}
}
override func viewDidLoad() {
super.viewDidLoad()
//创建表视图
let tableViewFrame = CGRect(x: 0, y: 20, width: self.view.frame.width,
height: self.view.frame.height-20)
self.tableView = UITableView(frame: tableViewFrame, style:.plain)
self.tableView!.delegate = self
self.tableView!.dataSource = self
//创建一个重用的单元格
self.tableView!.register(UITableViewCell.self,
forCellReuseIdentifier: "MyCell")
self.view.addSubview(self.tableView!)
//配置搜索控制器
self.countrySearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self //两个样例使用不同的代理
controller.hidesNavigationBarDuringPresentation = false
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.searchBarStyle = .minimal
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
点击搜索才进行搜索
ViewController:
import UIKit
class ViewController: UIViewController {
//展示列表
var tableView: UITableView!
//搜索控制器
var countrySearchController = UISearchController()
//原始数据集
let schoolArray = ["清华大学","北京大学","中国人民大学","北京交通大学","北京工业大学",
"北京航空航天大学","北京理工大学","北京科技大学","中国政法大学",
"中央财经大学","华北电力大学","北京体育大学","上海外国语大学","复旦大学",
"华东师范大学","上海大学","河北工业大学"]
//搜索过滤后的结果集
var searchArray:[String] = [String](){
didSet {self.tableView.reloadData()}
}
override func viewDidLoad() {
super.viewDidLoad()
//创建表视图
let tableViewFrame = CGRect(x: 0, y: 20, width: self.view.frame.width,
height: self.view.frame.height-20)
self.tableView = UITableView(frame: tableViewFrame, style:.plain)
self.tableView!.delegate = self
self.tableView!.dataSource = self
//创建一个重用的单元格
self.tableView!.register(UITableViewCell.self,
forCellReuseIdentifier: "MyCell")
self.view.addSubview(self.tableView!)
//配置搜索控制器
self.countrySearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchBar.delegate = self //两个样例使用不同的代理
controller.hidesNavigationBarDuringPresentation = false
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.searchBarStyle = .minimal
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
在ViewControllerExtension:
import UIKit
class ViewController: UIViewController {
//展示列表
var tableView: UITableView!
//搜索控制器
var countrySearchController = UISearchController()
//原始数据集
let schoolArray = ["清华大学","北京大学","中国人民大学","北京交通大学","北京工业大学",
"北京航空航天大学","北京理工大学","北京科技大学","中国政法大学",
"中央财经大学","华北电力大学","北京体育大学","上海外国语大学","复旦大学",
"华东师范大学","上海大学","河北工业大学"]
//搜索过滤后的结果集
var searchArray:[String] = [String](){
didSet {self.tableView.reloadData()}
}
override func viewDidLoad() {
super.viewDidLoad()
//创建表视图
let tableViewFrame = CGRect(x: 0, y: 20, width: self.view.frame.width,
height: self.view.frame.height-20)
self.tableView = UITableView(frame: tableViewFrame, style:.plain)
self.tableView!.delegate = self
self.tableView!.dataSource = self
//创建一个重用的单元格
self.tableView!.register(UITableViewCell.self,
forCellReuseIdentifier: "MyCell")
self.view.addSubview(self.tableView!)
//配置搜索控制器
self.countrySearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchBar.delegate = self //两个样例使用不同的代理
controller.hidesNavigationBarDuringPresentation = false
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.searchBarStyle = .minimal
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}