2012-04-13 2 views
2

2つのスコープボタンでUISearchBarを使用しています。私は、検索テキストがない場合でも、スコープボタンを使用して行をフィルタリングする必要があります。現在のところ、検索テキストがある場合は、行のみがフィルタリングされます。 searchResultsTableViewのフレームサイズがゼロであることがデバッグからわかります。UISearchBar - 検索テキストがないときにすべての行を表示

アイデア?

+0

を結果searchText.length == 0ショーtextDidChangeで ? – Arbel

答えて

0

チェックこのアウト... ViewController.hファイルで

@interface ViewController : UITableViewController <UISearchBarDelegate, UISearchDisplayDelegate> 
{ 
    UISearchBar *searchBar; 
    UISearchDisplayController *searchDisplayController; 
} 

@property (nonatomic, retain) NSArray *friendsArray; 
@property (nonatomic, retain) NSArray *searchResults; 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope; 

そしてViewController.mファイル内:それをする

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 

     self.friendsArray = [[NSArray alloc]initWithObjects:@"Napoli",@"Juventus",@"Inter",@"Milan", @"Lazio",@"Real Madrid",@"Barcelona",@"Villareal",@"Valencia",@"Deportivo",@"Manchester City",@"Manchester United",@"Chelsea",@"Arsenal",@"Liverpool", nil]; 
     self.searchResults = [[NSArray alloc] init]; 

    } 
    return self; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 160, 44)]; 
    searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 

    searchDisplayController.delegate = self; 
    searchDisplayController.searchResultsDataSource = self; 

    self.tableView.tableHeaderView = searchBar; 

} 

#pragma mark - Table view data source 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     return [self.searchResults count]; 

    } else { 
     return [self.friendsArray count]; 

    } 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row]; 
    } else { 
     cell.textLabel.text = [self.friendsArray objectAtIndex:indexPath.row]; 
    } 


    return cell; 
} 

#pragma mark - searchDisplayControllerDelegate 


-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF contains[cd] %@", 
            searchText]; 

    self.searchResults = [self.friendsArray filteredArrayUsingPredicate:resultPredicate]; 
} 
0

、保存すべてのデータを含む配列すべてのコピーではなく、検索の配列がこれを見つけることができエヴァー

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 

    if (searchText.length == 0) { 
     tableSource = [NSMutableArray arrayWithArray: self.homeSheets.data]; 
     [self.tableView reloadData]; 
     return; 
    } 

    ... 
}