iOS Swift:准备collectionView单元以供重用

时间:2015-03-29 00:42:00

标签: ios swift uikit

我收到了一些意想不到的细胞回收行为。我有一个带有自定义单元格的UICollectionView,每个单元格都包含一个UITableView,它可以显示两种类型的自定义单元格之一(imageCell或movieCell)。

当回收collectionView单元格时,自定义表格视图单元格未正确出列。相反,tableViewCell类型继承自回收的单元格。

override func prepareForReuse() {
    super.prepareForReuse()

    if tableView != nil {
        tableView = nil
    }
}

我应该做些什么?

1 个答案:

答案 0 :(得分:3)

正如@nhgrif在他现在删除的帖子中所说,你的代码没有多大意义。 (你怎么删掉它?)

我建议不要每次回收集合视图单元时删除表视图并重新创建它。表视图是大型复杂对象,创建和销毁它们非常昂贵。

相反,保持表视图完整,只需向其发送reloadData消息。然后它应该用新内容重新加载。

如果执行每次都要创建和销毁表视图,请使用用于存储表视图的实例变量作为弱可选变量。然后只需从它的超级视图中删除表格视图。这将导致它被释放。

如果使表视图变量为弱可选项,则需要在强局部变量中创建表视图,将其添加到超级视图,然后将其保存到弱实例变量中。如果您尝试直接在弱实例变量中创建可见视图,则在将其添加为子视图之前,它将被取消分配。