4

テーブル ビューに検索バーを実装しようとしています。ユーザーがテキストを入力すると、フィルタリングがうまく機能します。検索バーにテキストがある場合、スコープ ボタンも機能します (テキスト フィルタリングによって結果をフィルタリングします)。私の問題は、検索バーのスコープ ボタンにテキストがない場合に機能しないことです。フィルタリング メソッドは配列を正常にフィルタリングします。しかし、テーブルビューは更新されません。

searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope

しかし、うまくいきませんでした。私は使っています

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
// Tells the table data source to reload when text changes
[self filterContentForSearchText:searchString
                           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
// Return YES to cause the search result table view to be reloaded.
return YES;

}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
// Tells the table data source to reload when scope bar selection changes
[self filterContentForSearchText:self.searchDisplayController.searchBar.text
                           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
// Return YES to cause the search result table view to be reloaded.
return YES;

}

テキストフィルタリング用。データのリロードも試しましたが、うまくいきませんでした。テキストの変更後にテーブルビューが更新される理由がわかりませんでしたが、スコープバーの変更後に更新されません。

4

1 に答える 1

1

私は問題を解決しました。私はもうsearchDisplayControllerを使用せず、代わりにandを使用textDidChangeselectedScopeButtonIndexDidChangeます。また、2つのテーブルビュー(通常と)を使用する代わりに、self.searchDisplayController.searchResultsTableView単一のテーブルビューを使用していて、そのデータソースを変更しています。今のところ、これで問題が解決したようです。しかし、なぜテーブルビューshouldReloadTableForSearchScope:を呼び出して更新しないのか理解できませんでした cellForRowAtIndexPath:

于 2013-01-23T07:17:41.623 に答える