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:)
TableView 控制器中无法扩展 TableView 单元格的高度