ios UISearchDisplayController 实现 UITableView 搜索功能

来源:互联网 发布:鸟瞰图设计制作软件 编辑:程序博客网 时间:2024/06/04 19:39

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

里面内置了一个 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


0 0
原创粉丝点击