UISearchDisplayController 搜索控制器

// .h 中得代理  <UITableViewDelegate,UITableViewDataSource,UISearchDisplayDelegate>


_dataArray = [[NSMutableArray alloc] initWithObjects:@"qq", @"tencent", @"NOKIA", @"samsung", @"google", @"apple", @"MicroSoft", @"htc", nil];
    
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 320, 460) style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
    [_tableView release];
    
    UISearchBar* searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    _tableView.tableHeaderView = searchBar;
    
    _searchDC = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
    _searchDC.searchResultsDelegate = self;
    _searchDC.searchResultsDataSource = self;
    _searchDC.delegate = self;
    
    
    
    
    - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    //谓词 [cd]加上这个就不区分大小写了
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF contains [cd] %@",searchString];
    NSString* str = [NSString stringWithFormat:@"SELF like [cd] '%@*'",searchString];
    predicate = [NSPredicate predicateWithFormat:str];
    self.searchArray = [_dataArray filteredArrayUsingPredicate:predicate];
    
    return YES;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 3;
}
/*
 0     放大镜
 -       a
 -       b
 -       c
 */

- (NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView{
    return [NSArray arrayWithObjects:UITableViewIndexSearch,@"a", @"b", @"c", nil];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
    if (index == 0) {
        [tableView setContentOffset:CGPointMake(0, 0) animated:YES];
    }
    return index - 1;
}



//tableView delegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    //判断tableView是searchBar自带的tableView还是我们自己的tableView
    //UIView* view = button;
    //[view class]
    if ([tableView isKindOfClass:[_searchDC.searchResultsTableView class]]) {
        //如果是yes,证明是searchBar自带的tableView
        return _searchArray.count;
    }
    
    return _dataArray.count;
}

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ID"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"] autorelease];
    }
    
    
    if ([tableView isKindOfClass:[_searchDC.searchResultsTableView class]]) {
        cell.textLabel.text = [_searchArray objectAtIndex:indexPath.row];
    } else {
        cell.textLabel.text = [_dataArray objectAtIndex:indexPath.row];
    }
    
    
    return cell;
}


你可能感兴趣的:(搜索控制器)