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'是存储过滤项目(搜索后)的地方.当然,在重新加载数据之前,您必须预先加载项目(例如搜索历史记录).
我不知道这是不是一个很好的方式或者不是在表现方面做的,不是,但它对我来说很完美,我希望这对其他人也有用.如果有更好的方法,请评论.
归档时间: |
|
查看次数: |
5394 次 |
最近记录: |