我有一个大的 UITableView,我需要遍历它的单元格以提取一些信息。问题是 UITableView 边界之外的单元格等于 null,因此我无法提取有关它们的任何信息。
是否可以防止 UITableView 破坏超出范围的单元格(当前不可见的单元格)。修改数据源并重新加载整个表不是一种选择。
我有一个大的 UITableView,我需要遍历它的单元格以提取一些信息。问题是 UITableView 边界之外的单元格等于 null,因此我无法提取有关它们的任何信息。
是否可以防止 UITableView 破坏超出范围的单元格(当前不可见的单元格)。修改数据源并重新加载整个表不是一种选择。
您可以将您创建的所有单元格复制到 NSMutableArray 中并在那里保留它们的引用,这样系统就不会释放它们,但这不是您应该使用它的方式。
如果您的表格太长,这可能会导致大的内存问题,您应该考虑一种保存单元格数据的解决方案,而不是单元格本身。
从技术上讲是的,但你不想这样做。我是说真的!你没有!!
问题是为什么你需要这种行为,你应该只使用数据源和行数就可以了。如果您想要有关“不可见单元格”的信息,您真的应该查看您的NSArray
/CoreData
或填充 TableView 的任何内容
你必须重新考虑你的方法。单元格消耗大量资源,因此它们通常可重复使用 - 因此您不必将它们全部保存在内存中或为每个新行销毁/创建。您应该将所有数据保存在某个数组中(您可以将核心数据或 Web 服务或其他数据保存到数组中)。然后,要获取任何数据,请参阅数组中的 indexpath.row (objectAtIndex:indexpath.row)。
您可以使用嵌入UITableView
在 aUIScrollView
中来防止破坏单元格。
这通过告诉 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)
}
}