ios UISearchDisplayController 实现 UITableView 搜索功能
2015-12-28 17:18
796 查看
UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类。
里面内置了一个 UITableView 用于显示搜索的结果。它可以和一个需要搜索功能的
controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都
封装好了,使用起来非常非常的简单。特别是要实现全屏搜索时使用最多。
全屏搜索的意思是如果你用了 NavigationBar 当点击搜索框时 TableView 会自动弹上去覆盖
NavigationBar,达到一种全屏搜索的效果,这一切 UISearchDisplayController 都封装好了,如果自己
写就比较麻烦一些。
里面内置了一个 UITableView 用于显示搜索的结果。它可以和一个需要搜索功能的
controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都
封装好了,使用起来非常非常的简单。特别是要实现全屏搜索时使用最多。
全屏搜索的意思是如果你用了 NavigationBar 当点击搜索框时 TableView 会自动弹上去覆盖
NavigationBar,达到一种全屏搜索的效果,这一切 UISearchDisplayController 都封装好了,如果自己
写就比较麻烦一些。
#import "SearchListViewController.h" @interface SearchListViewController ()<UITableViewDataSource,UITableViewDelegate,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate> { NSArray *_dataList; NSMutableArray *_showData; UISearchBar *_searchBar; UITableView *_searchTableView; UISearchDisplayController *searchDisplayController; } @end @implementation SearchListViewController - (void)viewDidLoad { [super viewDidLoad]; [self setTopNavBackButton]; [self initContentView]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:YES]; [self performSelector:@selector(setCorrectFocus) withObject:NULL]; } - (void)initContentView { _showData = [[NSMutableArray alloc]init]; _dataList = [@[@"百度",@"杭州",@"谷歌",@"苹果",@"and",@"广州",@"view",@"and",@"and",@"苹果IOS",@"谷歌android",@"微软",@"微软WP",@"table",@"bable",@"sable",@"安庆",@"西湖",@"六六",@"gable",@"fable",@"mable"]mutableCopy]; [self initSearchBar]; } #pragma mark -- UI - (void)initSearchBar { _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 20, kDEVICEWIDTH,44)]; _searchBar.placeholder = @"搜索"; [self.view addSubview:_searchBar]; searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self]; searchDisplayController.searchResultsDataSource = self; searchDisplayController.searchResultsDelegate = self; _searchBar.delegate = self; } - (void)initTableView { _searchTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, kDEVICEWIDTH, kDEVICEHEIGHT-20) style:UITableViewStylePlain]; _searchTableView.delegate = self; _searchTableView.dataSource = self; [self.view addSubview:_searchTableView]; } - (void)setCorrectFocus { [_searchBar becomeFirstResponder]; } /* * 如果原 TableView 和 SearchDisplayController 中的 TableView 的 delete 指向同一个对象 * 需要在回调中区分出当前是哪个 TableView */ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 谓词搜索 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains [cd] %@",searchDisplayController.searchBar.text]; _showData = [[NSMutableArray alloc] initWithArray:[_dataList filteredArrayUsingPredicate:predicate]]; return _showData.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]; } cell.textLabel.text = _showData[indexPath.row]; return cell; } -(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self searchBar:_searchBar textDidChange:nil]; [_searchBar resignFirstResponder]; } - (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { [self searchBar:_searchBar textDidChange:nil]; [_searchBar resignFirstResponder]; } @end
相关文章推荐
- 创建队列 NSOperationQueue dispatch队列组
- iOS页面之间跳转隐藏UITabbar
- request.getRequestDispatcher()的两个方法forward()/include()!!!
- Burp Suite使用介绍——准备工作
- 解决小米手机出现INSTALL_FAILED_UID_CHANGE错误,安装应用失败的问题
- response.setCharacter和request.setCharacterEncoding详解
- Get Jenkins job build queue length
- Get Jenkins job build queue length
- Win10 Mobile下一个预览版或是11088 Build 11088或会包含多项新功能
- IOS-47-动态改变UIView高度最简单的方法
- 安装win7或win8系统时UEFI和Legacy模式的设置
- C# break,continue,return
- iOS通过URL构建UIImage
- EasyUI写的登录界面
- UIImagePicker与UIAlertController组合使用 上传图片
- UIBarButtonSystemItem 各种款式
- UITableView 基本使用方法总结
- [转]iOS各种图片的大小要求 iOS Human Interface Guidelines: Icon and Image Sizes
- UITableView 的使用总结
- iOS UI-创建空项目