ios UISearchDisplayController 实现 UITableView 搜索功能
来源:互联网 发布:淘宝网冻结 编辑:程序博客网 时间:2024/05/22 04:25
http://www.cnblogs.com/lesliefang/p/3929677.html
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(0, 0, self.view.frame.size.width , 44)]; 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
0 0
- ios UISearchDisplayController 实现 UITableView 搜索功能
- ios UISearchDisplayController 实现 UITableView 搜索功能
- ios UISearchDisplayController 实现 UITableView 搜索功能
- ios UISearchDisplayController 实现 UITableView 搜索功能
- ios UISearchDisplayController 实现 UITableView 搜索功能
- ios UISearchDisplayController 实现 UITableView 搜索功能 UISearchDisplayController 是苹果专为 UITableView 搜索封装
- UISearchDisplayController实现搜索功能
- iOS--搜索UISearchController&&UISearchDisplayController
- UISearchDisplayController 实现筛选功能
- UISearchDisplayController(iOS < 8.0)实例应用实现搜索功能和VC展示效果, 以及代理方法的介绍
- IOS-模糊搜索UISearchBar+UISearchDisplayController
- iOS之默认搜索UISearchDisplayController
- ios UITableView表格实现搜索栏搜索
- UITableView 如何实现搜索框功能
- UITableView 如何实现搜索框功能
- iOS 搜索功能实现
- iOS 搜索功能的实现
- iOS 搜索功能的实现
- Syntax error on tokens, delete these tokens
- PAT 数据结构 02-线性结构3. 求前缀表达式的值(25)
- http://www.cnblogs.com/flashsky/articles/642720.html
- ubuntu jdk1.7 安装
- Xcode如何显示代码行数
- ios UISearchDisplayController 实现 UITableView 搜索功能
- sql——触发器——存储过程&触发器(3/3)
- 每天一个linux命令(47):iostat命令
- CentOS安装Cloudera Manager详细介绍(转)
- Objective-C - 类的静态常量
- 【leetcode】14. longest common prefix
- 2014年注电考试心得
- 删除一周的日志文档
- 【设计模式】单例模式