【问题标题】:UISearchDisplayController with UITableViewControllerUISearchDisplayController 与 UITableViewController
【发布时间】:2011-07-09 15:27:29
【问题描述】:

我有一个UITableViewController,在其中我使用Interface Builder 添加了一个UISearchBar 作为tableHeaderView。然后我在笔尖添加了一个UISearchDisplayController,并设置了所有的连接(delegatesearchResultsDelegatesearchContentsControllersearchResultsDataSource,都连接到UITableViewController)。 然后我在我的代码中实现了所有的委托和数据源方法。

它就像一个魅力,除了一个奇怪的错误:有时搜索结果表视图不会滚动,我可以看到它后面的主表视图的闪烁指示器。我 NSLog'd searchResultsTableView 显然它是主 tableview 的子视图,我想这就是我之前描述的触摸问题背后的原因。

我的错误是什么?是否可以将UITableViewControllerUISearchDisplayController 一起使用?如果是这样,我该如何设置结果表视图不会被添加为我的主表视图的子视图?

更新:我发现this sample 使用UISearchDisplayControllerUITableViewController,显然搜索表视图也被添加到主表视图中。所以现在我不认为这是我的问题。

问题是我在我正在做的事情和那个样本正在做的事情之间找不到任何实质性的区别。我只是在UITableViewController 中添加UISearchBar 作为UITableView 标头并向其中添加UISearchDisplayController ......当我尝试滚动时,就像iOS 在主表和搜索表之间混淆了。你有什么想法吗?

更新:增加了 200 代表的赏金。 请仅在您知道自己在说什么的情况下回答。

【问题讨论】:

  • 您的搜索功能似乎有错误并且它会循环。
  • @user792677 对不起,我不明白你的评论,你能解释一下吗?
  • 您是分别添加了搜索栏和UISearchDisplayController,还是将UISearchDisplayController 直接拖到表头视图中,它自己创建了所有需要的连接。我不知道这是否有什么不同,但我们永远不知道。
  • 我可以给你的另一个提示是尝试更改主表视图的背景颜色,看看它是否与搜索结果表视图重叠(并防止它滚动)。你说你可以看到主表视图的闪烁指示器,这很奇怪,因为当我尝试示例时,搜索结果表视图与主表视图完全重叠。
  • 如果没有更多信息,我认为没有人可以回答这个问题。您能否在示例代码中重现此问题并发布指向它的链接,以便人们更好地理解您的代码?

标签: iphone cocoa-touch uisearchdisplaycontroller


【解决方案1】:

这是一个额外的self.tableView.scrollEnabled = YES,它在搜索数据请求完成后立即被调用。希望对以后遇到同样问题的人有所帮助。

【讨论】:

  • 致反对者:请解释一下?这是无稽之谈。有人在这里对所有答案投反对票很开心。
  • 搞砸投票者...您采取了主动并找到了解决方案!太多人没有投入工作就放弃了。
  • 这个答案没有不规则的投票,也没有垃圾邮件标志。伙计们,回答自己的问题没有错。
  • 在这个错误上花费了 3 天后,我们发现(并非没有您的回答的帮助)在表视图委托方法之一中有一个 tableView.scrollEnabled = YES;。据我了解,一旦打开搜索结果表,它就会作为子视图添加到主表视图,而主表视图的scrollEnabled 属性设置为NO(全部由搜索显示控制器)。在我的情况下,scrollEnabled 属性在之后被覆盖为 YES。这导致 2 个可滚动的表格视图位于另一个内部,有时操作系统会将滚动传递到底部
【解决方案2】:

搜索显示控制器管理搜索栏和表格视图的显示,表格视图显示由另一个视图控制器管理的数据的搜索结果。

这里的 searchDisplaycontroller 结合了 searchbar 和 tabelview,它在 tableview 中显示结果数据,因此不需要单独的 tableview。

当你使用 UISerarchBar 时,它需要至少有一个 UITableView,它可以在视图中显示结果。在这里,您甚至无需添加 SearchDisplayController 即可查看结果。

【讨论】:

  • 好的,我现在将编辑我的答案,因为它可以完成。我误解了这一点。那么,您到底想知道什么?
  • 您好,我已阅读您的问题并下载了您在此处链接的代码。仅处理您的解决方案。请等我给你完美的答案。
  • 搜索显示控制器管理搜索栏的显示和显示由另一个视图控制器管理的数据的搜索结果的表格视图。
  • 哦,真的吗?不知道!
【解决方案3】:

我认为您可能想尝试将 UISearchDisplayController IBOutlet 添加到您的类并将其连接到 nib 文件中的 SearchdDisplayController。我很有趣的是,你笔尖中的那个 searchdisplay 控制器会自动将它自己连接到检查器中的默认 serachdisaplaycontreoller 插座。

【讨论】:

    【解决方案4】:

    搜索栏控制器使用自己的表视图,该表视图添加在您自己的之上。如果将 UISearchDisplayController 的委托和数据源设置为 UITableViewController,则表视图控制器必须在其委托方法中区分两个表视图。如果您没有正确执行此操作,这可能会导致您的错误。

    换句话说:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if (tableView == self.tableView) {
            return number of rows in data model;
        } else {
            perform the search query;
            return number of rows in search query;
        }
    }
    

    您对所有委托和数据源方法执行类似的操作。

    我不能 100% 确定这是导致您的问题的原因,但如果没有看到更多来源,很难说。

    【讨论】:

    • 谢谢,但这不是我的问题。我已经在做这种区分,但它是无关的。问题是当我尝试滚动搜索结果表时,有时它不会滚动,我可以看到主表的闪烁指示器(这意味着主表视图收到了触摸而不是搜索表)。此外,之前我还看到了一个新故障:我在主表的标题中有一个视图,有时当我滚动搜索表时,主表中的这个标题视图神奇地出现并与搜索表重叠。很奇怪。
    • 修复此类错误的常用方法是构建一个最小的应用程序并查看它是否重现此行为。这将导致您可以向 Apple 发送错误报告,或者(更有可能)深入了解问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2012-03-30
    相关资源
    最近更新 更多