0

我有一个大的 UITableView,我需要遍历它的单元格以提取一些信息。问题是 UITableView 边界之外的单元格等于 null,因此我无法提取有关它们的任何信息。

是否可以防止 UITableView 破坏超出范围的单元格(当前不可见的单元格)。修改数据源并重新加载整个表不是一种选择。

4

4 回答 4

2

您可以将您创建的所有单元格复制到 NSMutableArray 中并在那里保留它们的引用,这样系统就不会释放它们,但这不是您应该使用它的方式。

如果您的表格太长,这可能会导致大的内存问题,您应该考虑一种保存单元格数据的解决方案,而不是单元格本身。

于 2013-11-14T09:19:09.013 回答
1

从技术上讲是的,但你不想这样做。我是说真的!你没有!!

问题是为什么你需要这种行为,你应该只使用数据源和行数就可以了。如果您想要有关“不可见单元格”的信息,您真的应该查看您的NSArray/CoreData或填充 TableView 的任何内容

于 2013-11-14T09:19:45.647 回答
0

你必须重新考虑你的方法。单元格消耗大量资源,因此它们通常可重复使用 - 因此您不必将它们全部保存在内存中或为每个新行销毁/创建。您应该将所有数据保存在某个数组中(您可以将核心数据或 Web 服务或其他数据保存到数组中)。然后,要获取任何数据,请参阅数组中的 indexpath.row (objectAtIndex:indexpath.row)。

于 2013-11-14T09:23:46.690 回答
0

您可以使用嵌入UITableView在 aUIScrollView中来防止破坏单元格。

这通过告诉 UITableView 将其内容大小重置为全高来工作。

但有以下条件:

  1. 禁用 UITableView 的滚动。

  2. 使用以下类子类 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)
     }
    }
    
于 2020-12-27T16:12:40.913 回答