UISearchView
1 #import "ViewController.h" 2 3 @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating> 4 { 5 // 原始数据源 6 NSMutableArray *_arrayM; 7 // 搜素结果数据源 8 NSMutableArray *_searchArrayM; 9 10 // 搜索控件 11 UISearchController *_searchC; 12 13 UITableView *_tableView; 14 } 15 @end 16 17 @implementation ViewController 18 19 - (void)viewDidLoad { 20 [super viewDidLoad]; 21 22 // 1.获取原始数据 23 [self getData]; 24 25 // 2. 添加UI 26 [self addUI]; 27 } 28 29 - (void)getData 30 { 31 _arrayM = [NSMutableArray array]; 32 _searchArrayM = [NSMutableArray array]; 33 34 for (int i = 'A'; i <= 'Z'; i ++) { 35 for (int j = 0; j < 10; j ++) { 36 [_arrayM addObject:[NSString stringWithFormat:@"%c--%d",i,j]]; 37 } 38 } 39 40 _searchArrayM = _arrayM; 41 } 42 43 - (void)addUI 44 { 45 // 1. 添加tableview 46 _tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain]; 47 _tableView.delegate = self; 48 _tableView.dataSource = self; 49 [self.view addSubview:_tableView]; 50 51 // 2. 添加搜索控制器 52 _searchC = [[UISearchController alloc] initWithSearchResultsController:nil]; 53 // 设置UISearchController 的代理 54 _searchC.searchResultsUpdater = self; 55 // 搜索蒙板是否显示(NO 不显示) 56 _searchC.dimsBackgroundDuringPresentation = NO; 57 // 设置UISearchController的位置 58 _tableView.tableHeaderView = _searchC.searchBar; 59 // 位置自适应 60 [_searchC.searchBar sizeToFit]; 61 } 62 63 - (NSInteger )tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 64 { 65 66 if (!_searchArrayM || _searchArrayM.count == 0) {// 如果没有搜索到内容,显示原始数据 67 _searchArrayM = _arrayM; 68 } 69 70 return _searchArrayM.count; 71 } 72 73 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 74 { 75 NSString *resuID = @"ID"; 76 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:resuID]; 77 if (cell == nil) { 78 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:resuID]; 79 } 80 cell.textLabel.text = [_searchArrayM objectAtIndex:indexPath.row]; 81 return cell; 82 } 83 84 - (void)updateSearchResultsForSearchController:(UISearchController *)searchController 85 { 86 // 1.获取搜索框中用户输入的关键字 87 NSString *filterStr = searchController.searchBar.text; 88 // 2.搜索包含关键字的内容 89 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c]%@",filterStr]; 90 // 3.[_arrayM filteredArrayUsingPredicate:predicate] 从原始数据库中查找到包含关键字的数据 91 _searchArrayM = [NSMutableArray arrayWithArray:[_arrayM filteredArrayUsingPredicate:predicate]]; 92 93 // tableview刷新 94 [_tableView reloadData]; 95 }