4

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

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

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

我在 NSOperation 完成后肯定会迭代的部分中尝试了以下内容,但似乎并没有解决问题。

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

self.searchDisplayController.searchResultsTableView.hidden = YES;

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

提前感谢您的努力!

4

2 回答 2

16

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

您需要做的是重新加载 searchResultTableView 而不是当前的 tableview。按搜索词过滤掉数据后,放

[self.searchDisplayController.searchResultsTableView reloadData]

重新加载您的搜索结果,它会在您点击搜索按钮后显示。希望这有帮助

于 2011-04-17T05:31:09.633 回答
0

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

self.searchBar.text = @"xxxx";
[self.searchDisplayController.searchResultsTableView removeFromSuperview];
于 2011-09-20T04:42:06.627 回答