你的分享就是我们的动力 ---﹥

ios 仿照iphone手机通讯录 搜索功能 代码下载

时间:2014-04-10 16:06来源:www.chengxuyuans.com 点击:
模仿iphone手机通讯录 搜索功能。



模仿iphone手机通讯录

项目之前实现了拼音排序 通讯录的设计。现在给通讯录增加搜索功能。

原界面如下:

搜索功能主要依靠 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];
第二步 一个匹配的方法 和2个delegate

- (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;
    
}
最重要的是加载时:tableview判断

#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;
}
}
 

最后就实现了:




本文地址http://www.chengxuyuans.com/code/ios/76674.html