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

Posted

技术标签:

【中文标题】iOS Swift:准备 collectionView 单元以供重用【英文标题】:iOS Swift: Prepare collectionView cell for reuse 【发布时间】:2015-03-29 00:42:00 【问题描述】:

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

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

override func prepareForReuse() 
    super.prepareForReuse()

    if tableView != nil 
        tableView = nil
    

我应该做些什么不同的事情?

【问题讨论】:

【参考方案1】:

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

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

相反,保持表格视图不变并简单地发送一个 reloadData 消息。然后它应该用新的内容重新加载自己。

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

如果您将表视图变量设置为弱可选,则需要在强局部变量中创建表视图,将其添加到超级视图,然后将其保存到弱实例变量中。如果你尝试直接在弱实例变量中创建你的able view,它会在你添加为子视图之前被释放。

【讨论】:

这是有道理的。重新加载 tableView 正是我想要的。谢谢!

以上是关于iOS Swift:准备 collectionView 单元以供重用的主要内容,如果未能解决你的问题,请参考以下文章

CollectionViews和TableView不在StackView中显示 - Swift 4

iOS/Swift:InAppPurchase invalidProductIdentifiers

iOS开发-Swift进阶之源码编译

向后iOS兼容性 - Swift 2

iOS开发-Swift进阶之源码编译!

swift 第一个IOS应用程序