【问题标题】:Search result of UISearchDisplayController has other cell layout and behaviour than searched tableUISearchDisplayController 的搜索结果具有除搜索表之外的其他单元格布局和行为
【发布时间】:2012-01-10 03:17:01
【问题描述】:

我正在使用故事板。我有一个带有一个原型单元的 UITableView。此单元格的样式为“字幕”。我已经从单元格中添加了一个 segue 到详细视图。所以当用户点击一个单元格时,它会打开相应的编辑器......一切都很好。

现在我添加了一个 UISearchDisplayController 和一个 UISearchBar,实现了委托。效果很好。

但在搜索结果表中,单元格的样式为“默认”且不可点击。我必须做些什么才能让结果表看起来和表现得像“未搜索”表?

【问题讨论】:

  • 原因是 UISearchDisplayController 创建了它自己的 UITableView,因此,它使用默认单元格创建它。

标签: objective-c ios cocoa-touch uitableview uistoryboard


【解决方案1】:

我想为答案 #1 做出贡献,这就是我所做的,它对我有用

在方法中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

而不是从参数tableView中分配单元格

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

直接从视图上的 TableView 分配它,所以你必须替换它

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

有了这个

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

【讨论】:

  • 这对我有帮助。由于所有原型单元格都在“普通/原始”表格视图上,而不是“搜索”表格视图上,因此使用 self.而不是传给tableview的参数!
【解决方案2】:

发现问题...

方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

从 tableView 中拉出单元格,在结果情况下,它不是来自情节提要的 tableView,而是来自 SearchDisplayController 的 resultTableView。

我现在从情节提要的表格视图中让单元格在两种情况下都显示,现在它可以工作了。

【讨论】:

  • 嗨 Shinoo - 您介意解释或展示您解决此问题的代码吗?
  • 我的视图不是一个普通的表格视图。我需要一个背景图片,所以 tableview 嵌入到 uiview 中。视图控制器有一个到表视图的出口。当 cellForRowAtIndexPath 被调用时,我现在从 tableView 出口获取单元格,因此单元格始终派生自在界面构建器中自定义的 tableview。
【解决方案3】:

我一直在使用 ios 7.0 和 Xcode 5.0。我发现搜索显示控制器使用与委托视图控制器相同的 tableview 布局。你所要做的就是判断当前的tableview是delegate view controller的tableview,还是搜索显示控制器的tableview。不过记得加句

tableView.rowHeight = self.tableView.rowHeight;

在下面的代码sn-p中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

如果你忘记实现那句话,那么搜索显示的表格视图的行只有默认行那么高,这会让你觉得它不像“未搜索”的表格。

【讨论】:

    【解决方案4】:

    here 有一个可能的答案。它可能不完全适合您,但正如我所解释的, UISearchDisplayController 创建表视图。

    查看文档,您可以更好地理解它,但它指出:

    您使用搜索栏和 负责管理原始内容的视图控制器 搜索。当用户开始搜索时,搜索显示控制器 负责将搜索界面叠加在 原始视图控制器的视图并显示搜索结果。这 结果显示在搜索创建的表格视图中 显示控制器。除了原来的视图控制器,还有 逻辑上是其他四个角色。这些通常都是由 相同的对象,通常是原始视图控制器本身。

    【讨论】:

    • 感谢您的回答。我调试了我的代码,是的,调用了数据源方法。正确的单元格也从情节提要中拉出并填充了正确的数据,但结果表显示了默认的表格单元格样式...我不知道为什么...
    【解决方案5】:

    在我的情况下,UISearchDisplayController 使用正确的单元格类型(自定义),但单元格的高度错误,所以我不得不使用

    (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    

    修复它的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多