1.使用UISearchController制作一个简单的本地搜索应用
2015-12-20 23:54
661 查看
在前面, 我们讲解了很多 UIKit 的控件知识, 现在让我们来简单的应用一下, 看看我们是怎么去使用这些 UIKit 进行 App 的开发, 废话少说, 让我们直接来进入主题~
选中UITableViewCountroller之后, 交给了 UINavigationController 管理, 关于怎么快速交给 UINavigationController 管理, 在之前的文章我演示过, 在这次再做一次.
**设置数据, 实例化UISearchCont
实现UITableView的代理方法以及数据源方法
实现UISearchController的搜索更新方法
设置UISearchController
最后在viewDidLoad 中实现所有方法
第二种
第三种
好了, 这次就讲到这里, 下次我们继续~~
1.搭建页面
PS: 这里必须要使用UITableViewController, 否则的话会出现一些布局的问题选中UITableViewCountroller之后, 交给了 UINavigationController 管理, 关于怎么快速交给 UINavigationController 管理, 在之前的文章我演示过, 在这次再做一次.
2.实现代码
遵守代理协议, 数据源协议class MyTableViewController: UITableTableViewController, UISearchResultsUpdating { }
**设置数据, 实例化UISearchCont
var tableData = ["guangdong", "guangxi", "guangnan", "guangbei", "shanghai", "xiahai", "hunan", "hubei", "hudong", "huxi"] var filteredData:[String] = [] var resultSearchController = UISearchController()
实现UITableView的代理方法以及数据源方法
func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if resultSearchController.active { return filteredData.count } else { return tableData.count } } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as! UITableViewCell if resultSearchController.active { cell.textLabel?.text = filteredData[indexPath.row] } else { cell.textLabel?.text = tableData[indexPath.row] } return cell }
实现UISearchController的搜索更新方法
// 当 UISearchController 变成第一响应者的时候调用 func updateSearchResultsForSearchController(searchController: UISearchController) { // 删除 filteredData 里的所有元素, 并且默认的保存为 false filteredData.removeAll(keepCapacity: false) // 输入筛选文本, 获取之后会自动去内存中搜索关键字, SELF CONTAINS[c] 这句话是匹配规则的写法, 直接照抄就可以了 let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text) // 从 tableData 中筛选输入的关键字 let array = (tableData as NSArray).filteredArrayUsingPredicate(searchPredicate) // 再把筛选出来的关键字加入到 filtereData filteredData = array as! [String] // 刷新TableView self.tableView.reloadData() }
设置UISearchController
func serachController() -> UISearchController{ // 实例化 UISearchController, 并且设置搜索控制器为 nil let controller = UISearchController(searchResultsController: nil) // 设置更新搜索结果的对象为 self controller.searchResultsUpdater = self // 设置 UISearchController 是否在编辑的时候隐藏NavigationBar, 默认为 true controller.hidesNavigationBarDuringPresentation = false controller.dimsBackgroundDuringPresentation = false // 设置 UISearchController 搜索栏的 UISearchBarStyle 为Prominent controller.searchBar.searchBarStyle = UISearchBarStyle.Prominent // 设置 UISearchController 搜索栏的 Size 是自适应 controller.searchBar.sizeToFit() // UISearchController可以设置在三个地方 // 1.设置 navigationItem 的 titleView 为 UISearchController self.navigationItem.titleView = controller.searchBar // 2.设置 TableView 的 tableHeaderView 为controller.searchBar // self.tableView.tableHeaderView = controller.searchBar // 3.设置 TableView 的偏移量, 使 UISearchController 默认就隐藏在 NavigationBar 下 // self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(controller.searchBar.frame)) // 以上三种方法任选一种即可, 这里默认的是第一种 // 返回设置好的 UISearchController return controller }
最后在viewDidLoad 中实现所有方法
override func viewDidLoad() { super.viewDidLoad() resultSearchController = serachController() }
3.最终效果图
第一种第二种
第三种
好了, 这次就讲到这里, 下次我们继续~~
相关文章推荐
- Android布局的小窍门?
- Web布局连载——两栏固定布局(五)
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- 本人即将筹备败家日志,敬请期待!
- 【DevOps】为什么我们永远疲于奔命?
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- IE:使用搜索助手
- 网络管理之IP地址篇
- 文件的读出 编辑 管理
- flex 控件的重要属性
- 路由器访问列表的应用
- xDSL技术及其应用
- Delphi控件ListView的属性及使用方法详解
- 样式表CSS布局经验
- 基于XML的桌面应用
- web下载的ActiveX控件自动更新