3

現在、RootViewController で UISearchBar と UIDisplayController を次のように定義しています。

- (void)viewDidLoad {
    [super viewDidLoad];

    //Add the search bar
    aSearchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
    [aSearchBar sizeToFit];
    aSearchBar.delegate = self;
    aSearchBar.placeholder = @"Search YouTube...";

    self.tableView.tableHeaderView = aSearchBar;

    searchDC = [[UISearchDisplayController alloc] initWithSearchBar:aSearchBar contentsController:self];

    [self performSelector:@selector(setSearchDisplayController:) withObject:searchDC];

    searchDC.delegate = self;
    searchDC.searchResultsDataSource = self;
    searchDC.searchResultsDelegate = self;

    [aSearchBar release];
    [searchDC release];

}

検索ボタンが起動されると、次のイベントが実行されて API 呼び出しが実行されます。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [videoList removeAllObjects];
    if (searchBar.text.length > 0) {
        NSString *searchCriteria = [searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@"+"];

        YTJAppDelegate *appDelegate=(YTJAppDelegate*)[[UIApplication sharedApplication] delegate];
        [appDelegate searchWithCriteria:searchCriteria];

    }       
}

データは正しく取得されます。でも。検索で「キャンセル」ボタンを押したときにのみ表示されます。

データソースが更新された/検索ボタンが押された瞬間にビューを正しく更新するにはどうすればよいですか? 実装する必要がある特別な SearchDelegate メソッドはありますか?

4

2 に答える 2

1

関連するテーブルビューのコードが役立つ場合がありますが[self.tableView reloadData]、検索が完了した後は呼び出していないことを推測します

于 2010-09-03T20:42:18.010 に答える
1

解決策は、実装していたテーブル ビューで searchDisplayController デリゲートとデータ ソースをポイントすることでした。

searchDC.delegate = self;
searchDC.searchResultsDataSource = self.tableView.dataSource;
searchDC.searchResultsDelegate = self.tableView.delegate;
于 2010-09-03T21:10:08.803 に答える