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

事实证明,解决方案是将 searchDisplayController 委托和数据源指向它正在实现的表视图:

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

关联表视图的代码可能会有所帮助,但我猜你[self.tableView reloadData]在搜索完成后没有调用

于 2010-09-03T20:42:18.010 回答