次のように searchDisplayController と searchBar を設定しました。
UISearchBar *aSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 150, 44)];
self.reportSearchBar = aSearchBar;
_reportSearchBar.tintColor = DARKGRAY_COLOR;
_reportSearchBar.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
_reportSearchBar.delegate = self;
[aSearchBar release];
UISearchDisplayController *searchDisplayCtlr = [[UISearchDisplayController alloc] initWithSearchBar:self.reportSearchBar contentsController:self];
self.reportSearchDisplayController = searchDisplayCtlr;
self.reportSearchDisplayController.searchResultsDataSource = self;
self.reportSearchDisplayController.searchResultsDelegate = self;
[searchDisplayCtlr release];
UIBarButtonItem *searchBBI = [[UIBarButtonItem alloc] initWithCustomView:_reportSearchBar];
self.reportSearchBBI = searchBBI;
[searchBBI release];
[self.navigationItem setRightBarButtonItem:_reportSearchBBI animated:NO];
念のため、ViewController がクラスに準拠しているかどうかを確認しました。
if ([self conformsToProtocol:@protocol(UISearchDisplayDelegate)]) {
NSLog(@"conform to search display");
}
私のViewController .hファイルには次のものがあります:
<UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UISearchDisplayDelegate>
ただし、ブレークポイントを設定しました
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[self filterContentForSearchText:searchString];
return YES;
}
そして、それは決してそこに到達しません。UISearBarDelegate メソッドの 1 つを実装すると、そのメソッドに到達します。Apple のサンプル コード TableSearch を実行すると、上でコピーした searchDisplayController デリゲート メソッドが実行されます。私の場合、検索バーにテキストを入力しようとすると、searchDisplayController デリゲートが呼び出されないため、フィルター処理されたリストにオブジェクトが含まれていないため、アプリがクラッシュします。
考え?ありがとう!