EDIT:以下の回答に感謝します。 UISearchDisplayController
にテーブルをリロードすることができなかったので、検索テキストが変更されたときにフィルタメソッドを呼び出して、テーブルにデータを格納するために使用する配列を変更しました。UISearchDisplayControllerデリゲートからcellForRowAtIndexPathが呼び出されていません
(これはCocos2dを使っている)、次のように私はプログラム的UITableView
にUISearchDisplayController
を追加しました。 cellForRowAtIndexPath
は、ビューがロードされたときに最初に呼び出されますが、YES
が返されると、cellForRowAtIndexPath
は呼び出されません。
(self
がUIViewController
ある)
table = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 80.0f, 480.0f, 260.0f)];
table.delegate = self;
table.dataSource = self;
[[[CCDirector sharedDirector] openGLView] addSubview:table];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
searchBar.delegate = self;
searchBar.placeholder = @"Search";
table.tableHeaderView = searchBar;
UISearchDisplayController *searchDC = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDC.delegate = self;
searchDC.searchResultsDataSource = self;
searchDC.searchResultsDelegate = self;
// [searchBar release];
// [searchDC release];
文字は、以下の代表者が呼び出され、検索バーに入力されると、numberOfRowsInSection
が呼び出されますが、cellForRowAtIndexPath
が呼び出されることはありません。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
// Do filtering and add to the search array
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString scope:[[controller.searchBar scopeButtonTitles] objectAtIndex:[controller.searchBar selectedScopeButtonIndex]]];
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[controller.searchBar text] scope:[[controller.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
return YES;
}
最初に、テーブルの結果配列が空でないことを確認してください。次に、検索バーデリゲートから '[table reloadData];を呼び出すようにしてください。 –