import UIKit
class ViewController : UIViewController , UISearchBarDelegate {
// 引用通过storyboard创建的控件
@IBOutlet var searchDisplay: UISearchDisplayController !
// 所有组件
var ctrls:[ String ] = [ "Label" , "Button1-初级" , "Button1-高级" , "Button2-初级" , "Button2-高级" , "Switch" ]
// 搜索匹配的结果,Table View使用这个数组作为datasource
var ctrlsel:[ String ] = []
override func viewDidLoad() {
super .viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 起始加载全部内容
self .ctrlsel = self .ctrls
// 注册TableViewCell
self .searchDisplay.searchResultsTableView.registerClass( UITableViewCell . self ,
forCellReuseIdentifier: "SwiftCell" )
// 设置文本提示
self .searchDisplay.searchBar.placeholder = "输入搜索信息"
// 可以设置初始值
//self.searchDisplay.searchBar.text = "b"
// 设置搜索栏提示信息
self .searchDisplay.searchBar.prompt = "搜索组件名称"
// 不显示Search Bar边框
self .searchDisplay.searchBar.searchBarStyle = UISearchBarStyle . Minimal
// 显示分段条
self .searchDisplay.searchBar.showsScopeBar = true
self .searchDisplay.searchBar.scopeButtonTitles = [ "全部" , "初级" , "高级" ]
}
// 返回表格行数(也就是返回控件数)
func tableView(tableView: UITableView !, numberOfRowsInSection section: Int ) -> Int {
return self .ctrlsel.count
}
// 创建各单元显示内容(创建参数indexPath指定的单元)
func tableView(tableView: UITableView !, cellForRowAtIndexPath indexPath: NSIndexPath !)
-> UITableViewCell !
{
// 为了提供表格显示性能,已创建完成的单元需重复使用
let identify: String = "SwiftCell"
// 同一形式的单元格重复使用,在声明时已注册
let cell = self .searchDisplay.searchResultsTableView.dequeueReusableCellWithIdentifier(
identify, forIndexPath: indexPath) as UITableViewCell
cell.accessoryType = UITableViewCellAccessoryType . DisclosureIndicator
cell.textLabel?.text = self .ctrlsel[indexPath.row]
return cell
}
// 搜索代理UISearchBarDelegate方法,每次改变搜索内容时都会调用
func searchBar(searchBar: UISearchBar !, textDidChange searchText: String !) {
self .searchText = searchText
searchCtrls()
}
// 选择分段条时调用
func searchBar(searchBar: UISearchBar !, selectedScopeButtonIndexDidChange selectedScope: Int ) {
println (selectedScope)
searchCtrls();
}
// 保存搜索内容
var searchText: String = ""
// 搜索过滤
func searchCtrls() {
// 没有搜索内容时显示全部组件
if self .searchText == "" {
self .ctrlsel = self .ctrls
}
else {
var scope = self .searchDisplay.searchBar.selectedScopeButtonIndex;
// 匹配用户输入内容的前缀
self .ctrlsel = []
for ctrl in self .ctrls {
let lc = ctrl.lowercaseString
if lc.hasPrefix( self .searchText) {
if (scope == 0 || (scope == 1 && lc.hasSuffix( "初级" ))
|| (scope == 2 && lc.hasSuffix( "高级" ))) {
self .ctrlsel.append(ctrl)
}
}
}
}
// 不需要刷新Table View显示
// self.searchDisplay.searchResultsTableView.reloadData()
}
override func didReceiveMemoryWarning() {
super .didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
|