-
模仿iphone手机通讯录项目之前实现了拼音排序 通讯录的设计。现在给通讯录增加搜索功能。
原界面如下:
搜索功能主要依靠 uisearchbar uisearchdisplaycontroller来实现
第一步 初始化:初始化searbar 和seardisplaycontroller 以及 对应的两个数组(用来显示全部结果以及搜索结果)还有对应的delegate
@interface ComunicationViewController () { UISearchDisplayController *searchDisplayController; UISearchBar *searchBar; NSArray *allItems; NSArray *searchResults; }
第二步 一个匹配的方法 和2个delegatesearchBar = [[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];
最重要的是加载时:tableview判断- (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; } }
最后就实现了:
iOS 搜索功能的实现
最新推荐文章于 2018-09-06 11:02:03 发布