显示预加载的搜索结果?

Den*_*nis 12 objective-c uisearchbar uisearchdisplaycontroller ios xcode4.3

我有一个带有搜索栏的非tableview视图,虽然它工作正常,搜索显示控制器会隐藏表格视图,并在搜索栏中出现空字符串时覆盖暗灰色视图.我希望它在空字符串位于搜索栏中时显示预加载的数据,而不是隐藏表格视图并覆盖搜索栏下方的暗灰色视图.就像Safari for iOS中的Google搜索栏一样.

我之前在stackoverflow上发现了一个类似的问题: UISearchDisplayController - 如何预加载searchResultTableView,我真的无法让它工作.

我没有问题获取预加载数据并设置当前数据,但我不知道如何阻止displaycontroller删除searchResultsTableView.

提前致谢.

Den*_*nis 13

我终于找到了办法.

我发现searchDisplayController只是从superview中删除了searchResultsTableView,所以每当显示控制器试图隐藏表视图时,我只是将表视图添加回superview:

- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView
{
    // add the tableview back in
    [self.view addSubview:self.searchDisplayController.searchResultsTableView];
}
Run Code Online (Sandbox Code Playgroud)

然后我还必须在第一次点击搜索栏时显示tableview,所以我做了:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    // after the data has been preloaded
    self.searchResults = self.allItems;
    [self.searchDisplayController.searchResultsTableView reloadData];
}

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
    [self.view addSubview:self.searchDisplayController.searchResultsTableView];
}
Run Code Online (Sandbox Code Playgroud)

对我来说,'allItems'是我存储所有可搜索项目的地方,'searchResults'是存储过滤项目(搜索后)的地方.当然,在重新加载数据之前,您必须预先加载项目(例如搜索历史记录).

我不知道这是不是一个很好的方式或者不是在表现方面做的,不是,但它对我来说很完美,我希望这对其他人也有用.如果有更好的方法,请评论.

  • 这已不再适用于iOS 7.任何人都有可行的解决方案吗? (10认同)