UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用
示例代码如下:
1 // 2 // WKRootViewController.m 3 // 表格视图的搜索功能 4 // 5 // Created by student on 14-10-20. 6 // Copyright (c) 2014年 wukong. All rights reserved. 7 // 8 9 #import "WKRootViewController.h" 10 11 @interface WKRootViewController () 12 13 @property (strong, nonatomic) NSMutableArray* dataSource; 14 15 @property (strong, nonatomic)NSMutableArray* resultArrat; 16 17 18 @end 19 20 @implementation WKRootViewController 21 { 22 //用于加载数据源的表视图 23 UITableView *_tableView; 24 25 UISearchBar *_searchBar; 26 27 UISearchDisplayController *_searchControl; 28 } 29 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 30 { 31 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 32 if (self) { 33 // Custom initialization 34 } 35 return self; 36 } 37 38 - (void)viewDidLoad 39 { 40 [super viewDidLoad]; 41 42 [self createUI]; 43 [self createDataSource]; 44 // Do any additional setup after loading the view. 45 } 46 47 - (void)createDataSource 48 { 49 _dataSource = [[NSMutableArray alloc] init]; 50 _resultArrat = [[NSMutableArray alloc] init]; 51 for (int i = 'A'; i <= 'z'; i++) { 52 NSMutableArray *section = [[NSMutableArray alloc] init]; 53 for (int j = 1; j <= 10; j++) { 54 NSString *str = [NSString stringWithFormat:@"%c-%d", i, j]; 55 [section addObject:str]; 56 } 57 [_dataSource addObject:section]; 58 } 59 } 60 61 #pragma mark- UITableViewDataSource 62 63 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 64 { 65 //判断当前展示的表格 66 if (tableView != _tableView) 67 return 1; 68 return _dataSource.count; 69 } 70 71 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 72 { 73 if (tableView != _tableView) { 74 return _resultArrat.count; 75 } 76 return [[_dataSource objectAtIndex:section] count]; 77 } 78 79 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 80 { 81 [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; 82 83 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 84 if (tableView != _tableView) { 85 cell.textLabel.text = [_resultArrat objectAtIndex:indexPath.row]; 86 }else{ 87 cell.textLabel.text = [[_dataSource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 88 } 89 return cell; 90 } 91 92 - (void)didReceiveMemoryWarning 93 { 94 [super didReceiveMemoryWarning]; 95 // Dispose of any resources that can be recreated. 96 } 97 98 99 #pragma mark - CreateUI 100 - (void)createUI 101 { 102 _tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 30, 300, 440) style:UITableViewStylePlain]; 103 _tableView.delegate = self; 104 _tableView.dataSource = self; 105 [self.view addSubview:_tableView]; 106 107 _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 300, 30)]; 108 _searchBar.searchBarStyle = UISearchBarStyleMinimal; 109 _searchBar.delegate = self; 110 [_tableView setTableHeaderView:_searchBar]; 111 /* 112 第一个参数:用于输入搜索内容的UISearchBar对象 113 第二个参数:提供给我的表格视图数据源的控制器对象,这个对象必须是实现了表格的两个协议 114 */ 115 _searchControl = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self]; 116 // _searchControl.searchResultsTableView 117 // UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 60, 30)]; 118 // label.backgroundColor =[UIColor redColor]; 119 // [_searchControl.searchResultsTableView setTableHeaderView:label]; 120 //设置_searchControl自带的表格视图的委托对象 121 [_searchControl setSearchResultsDataSource:self]; 122 [_searchControl setSearchResultsDelegate:self]; 123 } 124 125 #pragma mark -UISearchBarDelegate 126 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 127 { 128 [_resultArrat removeAllObjects]; 129 NSString *str = [NSString stringWithFormat:@"*%@*", searchText]; 130 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF like %@", str]; 131 for (NSMutableArray *arr in _dataSource) { 132 for (NSString *str in arr) { 133 if ([pred evaluateWithObject:str]) { 134 [_resultArrat addObject:str]; 135 } 136 } 137 } 138 } 139 @end