UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类。

里面内置了一个 UITableView 用于显示搜索的结果。它可以和一个需要搜索功能的

controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都

封装好了,使用起来非常非常的简单。特别是要实现全屏搜索时使用最多。

全屏搜索的意思是如果你用了  NavigationBar 当点击搜索框时 TableView 会自动弹上去覆盖

NavigationBar,达到一种全屏搜索的效果,这一切 UISearchDisplayController 都封装好了,如果自己

写就比较麻烦一些。

关键代码:

@interface MainViewController : UITableViewController{
NSArray *data;
NSArray *filterData;
UISearchDisplayController *searchDisplayController;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(, , self.view.frame.size.width
, )];
searchBar.placeholder = @"搜索"; // 添加 searchbar 到 headerview
self.tableView.tableHeaderView = searchBar; // 用 searchbar 初始化 SearchDisplayController
// 并把 searchDisplayController 和当前 controller 关联起来
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; // searchResultsDataSource 就是 UITableViewDataSource
searchDisplayController.searchResultsDataSource = self;
// searchResultsDelegate 就是 UITableViewDelegate
searchDisplayController.searchResultsDelegate = self;
}
/*
* 如果原 TableView 和 SearchDisplayController 中的 TableView 的 delete 指向同一个对象
* 需要在回调中区分出当前是哪个 TableView
*/
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.tableView) {
return data.count;
}else{
// 谓词搜索
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains [cd] %@",searchDisplayController.searchBar.text];
filterData = [[NSArray alloc] initWithArray:[data filteredArrayUsingPredicate:predicate]];
return filterData.count;
}
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"mycell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
} if (tableView == self.tableView) {
cell.textLabel.text = data[indexPath.row];
}else{
cell.textLabel.text = filterData[indexPath.row];
} return cell;
}

DEMO 下载:http://pan.baidu.com/s/1pJ8vvC3

最新文章

  1. U-Boot移植
  2. android 使用httpclient访问网络
  3. LeetCode---Stack && Heap
  4. HTTP常见状态码 200 301 302 404 500
  5. SQLServer:FUNCTION/CURSOR/PROCEDURE/TRIGGER
  6. Fiddler学习纪要
  7. EnterpriseLibrary4 自己封装程序集实现log打印
  8. 菜鸟学习笔记2,$(document).ready()使用讨论
  9. 什么是mysql中的元数据
  10. hdu 5000 Clone
  11. Grunt构建工具插件篇——之less工具2
  12. 网络协议 终章 - GTP 协议:复杂的移动网络
  13. Socket远程调试日志之 SocketLog的简单实用
  14. Python2.x与3.x对比
  15. jQeury 批量删除
  16. 深层揭密extern "C"
  17. C# post json 匿名类 序列化
  18. Centos7-kafka-2.12安装验证
  19. 20155209林虹宇Exp4 恶意代码分析
  20. 路由策略和策略路由 & route-map

热门文章

  1. XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
  2. node后台启动
  3. .net 可选参数和命名参数
  4. [Postgres]关于Postgres的INHERIT,分表
  5. commons工具类
  6. TL431的应用
  7. java 去最后一位字符 str.substring(0,str.length()-1)
  8. [Objective-C语言教程]常量(7)
  9. samba使用
  10. [译文]casperjs使用说明-测试