防止UITableView行被破坏

时间:2013-11-14 09:15:03

标签: ios objective-c uitableview

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

技术上是的,但你不想这样做。我的意思是真的!你不要!!

问题是为什么你需要这种行为,你应该没有使用数据源和行数。如果您想了解有关隐形细胞的信息,请联系我们。你真的应该看看你的NSArray / CoreData或者是什么填充你的TableView

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

这是通过告诉 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)
     }
    }