2つのスコープボタンでUISearchBarを使用しています。私は、検索テキストがない場合でも、スコープボタンを使用して行をフィルタリングする必要があります。現在のところ、検索テキストがある場合は、行のみがフィルタリングされます。 searchResultsTableViewのフレームサイズがゼロであることがデバッグからわかります。UISearchBar - 検索テキストがないときにすべての行を表示
アイデア?
2つのスコープボタンでUISearchBarを使用しています。私は、検索テキストがない場合でも、スコープボタンを使用して行をフィルタリングする必要があります。現在のところ、検索テキストがある場合は、行のみがフィルタリングされます。 searchResultsTableViewのフレームサイズがゼロであることがデバッグからわかります。UISearchBar - 検索テキストがないときにすべての行を表示
アイデア?
チェックこのアウト... 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];
}
、保存すべてのデータを含む配列すべてのコピーではなく、検索の配列がこれを見つけることができエヴァー
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchText.length == 0) {
tableSource = [NSMutableArray arrayWithArray: self.homeSheets.data];
[self.tableView reloadData];
return;
}
...
}
を結果searchText.length == 0ショーtextDidChangeで ? – Arbel