我有一个很大的UITableView,我需要迭代它的单元格来提取一些信息。问题是UITableView边界之外的单元格等于null,因此我无法提取有关它们的任何信息。
是否可以防止UITableView破坏超出范围的单元格(当前不可见单元格)。不能修改数据源并重新加载整个表。
答案 0 :(得分:2)
您可以将您创建的所有单元格复制到NSMutableArray中并在那里保留对它们的引用,这样系统就不会释放它们,但这不是您应该使用它的方式。
如果您的表太长,这可能会导致大量内存问题,您应该考虑保存单元数据的解决方案,而不是单元本身。
答案 1 :(得分:1)
技术上是的,但你不想这样做。我的意思是真的!你不要!!
问题是为什么你需要这种行为,你应该没有使用数据源和行数。如果您想了解有关隐形细胞的信息,请联系我们。你真的应该看看你的NSArray
/ CoreData
或者是什么填充你的TableView
答案 2 :(得分:0)
你必须重新考虑你的方法。 Cells消耗大量资源,因此它们通常可以重复使用 - 因此您不必将它们全部保留在内存中,也不必为每个新行销毁/创建。您应该将所有数据放在某个阵列中(您可以从核心数据或Web服务或其他任何内容保存到阵列)。然后,从数组中获取任何数据引用indexpath.row(objectAtIndex:indexpath.row)。
答案 3 :(得分:0)
您可以在 UITableView
中使用嵌入的 UIScrollView
来防止破坏单元格。
这是通过告诉 UITableView 将其内容大小重置为全高来实现的。
但有以下条件:
禁用 UITableView 的滚动。
使用以下类子类化 UITableView 并在代码/故事板中使用它:
class IntrinsicTableView: UITableView {
override var contentSize:CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
}
}