iOS:带有扩展单元格的 TableView

Posted

技术标签:

【中文标题】iOS:带有扩展单元格的 TableView【英文标题】:iOS: TableView with expanding cells 【发布时间】:2012-10-09 19:16:48 【问题描述】:

我目前正在开发 android 应用的 ios 版本。在一个屏幕上,我有一系列行,单击这些行会展开以提供信息。

点击前:


点击后:

如何在 iOS 中复制这种行为?我不知道我应该使用表格视图还是只构建通用 UIView。我正在使用自动布局。

【问题讨论】:

【参考方案1】:

您可以在特定的 NSIndexPath 重新加载 UITableVIewCell 并计算单元格的新高度。

检查:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

来自UITableView

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

来自UITableViewDelegate

【讨论】:

【参考方案2】:

只需为UITableView 中的每个组自定义标题视图。使用 viewforheaderinsection 方法来做到这一点,并返回 UIButton 例如。如果你点击那个按钮,你应该在这个选定的组中插入UITableViewCells。我不能给你一个代码,因为我现在在 Windows 上,但这很简单。

UPD:查看 Apple 的示例代码:http://developer.apple.com/library/ios/#samplecode/TableViewUpdates/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010139

【讨论】:

【参考方案3】:

当您收到扩展表格单元格的触摸事件时,请在表格控制器中使用以下调用

[self.tableView beginUpdates];
[self.tableView endUpdates];

虽然动画块是空的,但调用 beginUpdates 和 endUpdates 会导致表格视图刷新单元格布局并动画更改。这将导致您的表视图委托被重新查询 - 因此请确保您在 UITableViewDelegate 中实现以下方法(通常您将其设置为 UITableViewController):

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

确保在收到触摸事件后,此方法将返回适当的展开单元格大小。结果将是一个非常流畅的单元格扩展动画:)

【讨论】:

以上是关于iOS:带有扩展单元格的 TableView的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将单元格插入带有静态单元格的表格视图时需要 tableView(_:indentationLevelForRowAt:)

ios在tableview单元格中显示/隐藏视图

TableView 控制器中无法扩展 TableView 单元格的高度

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

带有 Tableview 和静态单元格的空弹出框

iOS:访问下一个 Tableview 单元格的按钮