ios - 您可以将状态存储在自定义 UICollectionViewCell 中吗?或者状态是否可以被删除(比如当单元格滚出屏幕时)?

标签 ios swift uicollectionview uicollectionviewcell

如果我像这样创建一个 UICollectionViewCell 子类:

class StudentCell: UICollectionViewCell {
    var student: Student?
}

在我的 Controller 中,我实现了 UICollectionView 的 didSelectItemAtIndexPath 并设置了变量:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    if let studentCell = collectionView.cellForItemAtIndexPath(indexPath) as? StudentCell {
        studentCell.student = self.someStudent
    }
}

当我点击单元格时,它应该设置学生,但如果单元格滚动到屏幕之外,整个单元格可能会被删除,当它回到屏幕上时,它需要在 cellForItemAtIndexPath< 中重建自己/strong>.

我遇到的问题是我有一个 UICollectionView,其中的单元格不会滚动到我正在存储数据的屏幕之外。因为它们不会离开屏幕,所以我认为它们不应该被删除,但其中一个单元格似乎并没有保持它的可变性,这让我觉得它可能正在被删除,我可能需要将单元格外的状态移动到字典或其他东西,并在 didSelectItemAtIndexPath 我没有在单元格中设置变量,而是设置了字典。每当我需要访问数据而不是向单元格询问数据时,我都会在字典中查找它。

但无论哪种方式,我想知道是否有可能(或一个坏主意)将其设置在单元格中。

最佳答案

是的,UICollectionViewUITableView 中的单元格可以(将)由系统自行决定重用,不应用于存储状态信息,仅用于显示信息。具体来说,两个 View 在滚动到屏幕外时都会重用单元格,但不能保证这是唯一一次重用它们。处理此问题的通常方法是定义某种单元格数据对象,该对象存储每个单元格(可见和不可见)的数据,并根据需要/请求从中刷新单元格 View 。

关于ios - 您可以将状态存储在自定义 UICollectionViewCell 中吗?或者状态是否可以被删除(比如当单元格滚出屏幕时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927060/

相关文章:

使用 iCloud 存储的 iOS 应用程序正在向我的文档添加 .icloud 文件扩展名

ios - Siri 完整句子顺序,例如通过 WhatsApp 发送消息

ios - Swift:滚动时 UICollectionView 标题消失

ios - 将图像添加到 UICollectionView 中的 AVPlayerViewController

ios - 无法打开文件 "<appName>.app",因为您没有查看它的权限

macos - Swift 1.2 下标不可用

ios - 在真实 iOS 设备上模拟虚假位置

ios - UICollectionView 将图像添加到单元格

ios - dispatch_after 会阻塞主线程吗?

ios - 在 Phonegap iOS 应用程序中使用预填充数据库