搜索功能主要依靠 uisearchbar uisearchdisplaycontroller來實現
第一步 初始化:初始化searbar 和seardisplaycontroller 以及 對應的兩個數組(用來顯示全部結果以及搜索結果)還有對應的delegate
- @interface ComunicationViewController ()<UISearchBarDelegate,UISearchDisplayDelegate>
- {
- UISearchDisplayController *searchDisplayController;
- UISearchBar *searchBar;
- NSArray *allItems;
- NSArray *searchResults;
- }
- searchBar = [[UISearchBar alloc] init];
- searchBar.delegate = self;
- searchBar.placeholder = @"請輸入姓名";
- [searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
- [searchBar sizeToFit];
- comunicationTabelView.tableHeaderView = searchBar;
- //comunicationTabelView.frame = CGRectMake(0, 0, 320, comunicationTabelView.frame.size.height);
- searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
- [searchDisplayController setDelegate:self];
- [searchDisplayController setSearchResultsDataSource:self];
- [searchDisplayController setSearchResultsDelegate:self];
- - (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
- NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];
- searchResults = [[allItems valueForKey:@"RealName"] filteredArrayUsingPredicate:resultPredicate];
- [searchResults retain];
- NSLog(@"%@",searchResults);
- }
- #pragma mark - UISearchDisplayController delegate methods
- -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
- [self filterContentForSearchText:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
- return YES;
- }
- - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
- [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
- return YES;
- }
- #pragma mark -comunicationTableView代理方法
- //section中的row數
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- if (tableView == searchDisplayController.searchResultsTableView)
- {
- return searchResults.count;
- }
- else
- {
- return[[numArr objectAtIndex:section] intValue] ;
- }
- }
- //高度
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- return 50;
- }
- //section數
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- if (tableView == searchDisplayController.searchResultsTableView)
- {
- return 1;
- }
- else
- {
- return ziMuArr.count;
- }
- }
- //section 的名字
- -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
- {
- if (tableView == searchDisplayController.searchResultsTableView)
- {
- return nil;
- }
- else
- {
- return [ziMuArr objectAtIndex:section];
- }
- }
- - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
- { if (tableView == searchDisplayController.searchResultsTableView)
- {
- return nil;
- }
- else
- {
- return ziMuArr;
- }
- }