你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 模仿iphone手機通訊錄 搜索功能。

模仿iphone手機通訊錄 搜索功能。

編輯:IOS開發綜合



模仿iphone手機通訊錄

項目之前實現了拼音排序 通訊錄的設計。現在給通訊錄增加搜索功能。

原界面如下:

\

搜索功能主要依靠 uisearchbar uisearchdisplaycontroller來實現

第一步 初始化:初始化searbar 和seardisplaycontroller 以及 對應的兩個數組(用來顯示全部結果以及搜索結果)還有對應的delegate

@interface ComunicationViewController ()

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

最後就實現了:

\


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved