搜索方法迭代完成后重新加载/显示UISearchDisplayController的searchResultsTableView

时间:2011-01-16 00:13:22

标签: iphone objective-c cocoa-touch uisearchdisplaycontroller

我修改了Apple的示例iOS项目TableSearch的代码,以便通过解析其内容来使用它来搜索Web服务。我使用SearchDisplayController的SearchBar执行搜索时,除了一个丑陋的细节之外,我所实现的一切都很好。我已经更改了SearchDisplayController的行为,以便在点击“搜索”按钮时首先调用我的搜索功能。

问题在于,当搜索迭代(在NSOperationQueue的后台执行)完成时,(searchDisultsTableView)(searchDisplayController)不会自动显示或未分配结果内容。如果您随后更改SearchBar的文本或点击触摸搜索字段时出现的视图中的“取消”按钮(请参阅TableSearch),则会显示正确的TableView以及搜索结果。我只是希望在搜索操作完成后立即执行此步骤,因此在您进行交互之前。在此阶段,当前显示“无结果”标签。方法“filterContentForSearchText”和“shouldReloadTableForSearchString”与原始TableSearch项目相同。

我已经看了SearchDisplayController及其属性的不同类引用,但我还没有找到任何最终解决方案。

我已经在NSOperation完成后明确迭代的部分尝试了以下内容,但它似乎无法解决问题。

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

self.searchDisplayController.searchResultsTableView.hidden = YES;

这些操作都具有我想要显示的正确视图但是在您更改状态之前禁用滚动,以便再次隐藏视图。但是,可以选择TableView单元格。我基本上只想启用滚动功能......

提前感谢您的努力!

2 个答案:

答案 0 :(得分:16)

我有同样的问题,我刚解决了。我有完全相同的问题,我想禁用即时搜索,当我点击搜索按钮时,表格没有加载但是当我点击取消时,它加载了。如果我在搜索后没有加载正确结果的表视图上滚动,它会因索引超出范围而崩溃。

您需要做的是重新加载searchResultTableView而不是当前的tableview。按搜索字词过滤出数据后,请输入

[self.searchDisplayController.searchResultsTableView reloadData]

重新加载搜索结果,点击搜索按钮后会显示。 希望这个帮助

答案 1 :(得分:0)

我发现设置searchBar.text会导致searchDisplayController.searchResultsTableView被添加到self.view中,我这样解决:

self.searchBar.text = @"xxxx";
[self.searchDisplayController.searchResultsTableView removeFromSuperview];