我想扩展行高并显示内容。 我在视图中显示我的内容当我点击一个单元格时它应该展开,如下图所示,但没有重新加载UITableview。
到目前为止我一直在尝试。
1)我尝试扩展内部视图,但它没有工作
2)我尝试添加rowAtIndex它变得复杂了
3)我尝试更改更改行高度并滚动索引它工作正常,但我不想这样。 (糟糕的是我必须重新加载表格视图)
但我得到了很多答案,但它并没有解决我的问题,因为我在数组(数据源)中的数据不断更新,如果我在特定索引处刷新,索引中数组中的数据可能会有所不同。显示错误的输出。
解释
我的意思是我有一个struct数组,一旦数据发生变化,我会继续在后台更新它并重新加载表视图但是如果我在索引处重新加载行,并且如果数组中的数据已经更改,则可能显示重复正确?所以我想只是改变行的高度而不进行任何重新加载。
重新加载的问题是
虽然扩展数据可能会在数组中发生变化。所以我已经创建了一个视图,所有信息都预先加载一旦我点击单元格的高度应该从45变为76并且一旦我从最后一个单元格76到45再次点击不同的单元格,这个单元格从45到76。
答案 0 :(得分:15)
您甚至不需要重新加载单元格,只需获取目标位置的当前单元格并直接修改它并在表格视图上调用beginUpdates
和endUpdates
以重新计算所有单元格排高度。
答案 1 :(得分:8)
答案 2 :(得分:6)
只能通过代表更改表高度没有其他方法可以执行此操作我将向您展示一种简单的方法。
声明变量
var selectedIndex = NSIndexPath()
在 didSelectRowAtIndexPath 内重新加载选定的单元格
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedIndex = indexPath
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
}
内部 heightForRowAtIndexPath 返回尺寸
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath == selectedIndex {
return 100 //Size you want to increase to
}
return 50 // Default Size
}
答案 3 :(得分:5)
您可以尝试使用2个自定义单元格。使用变量跟踪用户选择并使用以下代码重新加载单个单元格。当用户点击单元格加载cellForRowAtIndexPath
中的详细单元格时。您的tableView
数组应包含您在消耗单元格时显示的信息。
self.tableView?.beginUpdates()
var indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView?.endUpdates()
答案 4 :(得分:3)
假设扩展TVC的逻辑正常,您只需要调用表格视图方法beginUpdates
和endUpdates
。这些方法应该将您的更新包装到TVC。
答案 5 :(得分:2)
您无需重新加载整个表格。 UITableView
有一个方法func reloadRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)
。您可以使用它来更新单个单元格。