【问题标题】:Table view cell expandable iOS表格视图单元格可扩展 iOS
【发布时间】:2011-04-05 09:33:12
【问题描述】:

我想要一个只有 cels 的表格视图,当您单击一个单元格时,它应该展开并显示所单击单元格的更多信息。

我已经看到了很多关于此的主题,但其中大部分都链接到 Apple 开发人员页面上的 Table View Animations and Gestures。以不同的方式做到这一点。他们使用标题部分,但出于布局原因,我想使用可扩展的单元格。

我已经尝试了几件事,主要是用

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

    if (isSearching && indexPath.row == selectedIndex) {
        return 110;
    }
    else {
        return rowHeight;       
    }

当我单击单元格时,单元格会展开,但该单元格中的信息保持不变。此外,展开时单元格的高度应与详细信息中的文本量有关。

谢谢!

【问题讨论】:

  • 嗨,彼得,我做了一些类似插入新自定义单元格的操作,希望这可能会有所帮助我已经在此处发布了链接 kshitizghimire.com.np/… 测试它是否有帮助,祝你好运
  • 听起来很有趣,但我不知道这是否会得到我想要的布局。额外的行看起来不像是另一行而不是细节吗?
  • 你实现了 layoutSubviews 还是在单元格中使用了 autoresizingMask ?
  • 是的,单元格内容不会自动调整大小。如果你改变它的高度,它不会自动影响它的子视图。如果设置了 autoresizingMask,子视图将相应地调整大小。如果 autoresizingMask 不够用,可以重写 layoutSubviews 以编程方式调整子视图的大小。
  • 您可以根据需要添加额外的行,只需创建自定义单元格,如果您希望每行有不同的自定义单元格,则需要创建不同的自定义单元格并根据需要为不同的行加载不同的自定义单元格

标签: ios objective-c cocoa-touch uitableview


【解决方案1】:

您可以通过使用自定义单元格来实现此目的。创建两个自定义单元格,一个用于普通行,另一个用于展开行。当用户触摸特定单元格时,您可以记录它的 indexPath 并重新加载 tableView。重新加载时,您可以使用刚刚发布的代码更改此选定行的高度(仅增加选定单元格的高度)。这将产生扩大细胞的效果。

【讨论】:

  • didSelectRowAtIndexPath 将为所选单元格调用。您可以在这里设置一个标志,当 [tableView reloadData] 完成时,它可以由 UITableViewDatSource 方法再次引用。
  • 代码通过哪种方式知道应该选择哪个自定义单元格?我是否在 didSelectRowAtIndexPath 中声明了这一点?在哪条路上?
  • 在 tableView 重新加载后再次调用 cellForRowAtIndexPath 时,您可以使用调用它的单元格的标志进行检查。然后,您可以使用新的自定义单元格重新绘制单元格,让其他单元格像以前一样。
  • 好的!我开始明白了,会试试这个。您是否也知道一旦再次点击单元格,我该如何收回它?
  • 一旦用户触摸另一个单元格,整个过程再次发生。这一次,一个新的细胞膨胀,看起来已经膨胀的细胞正在收缩。试试看!!