Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 您可以将状态存储在自定义UICollectionViewCell中吗?或者状态会被擦除(比如当单元格从屏幕上滚动时)?_Ios_Swift_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Ios 您可以将状态存储在自定义UICollectionViewCell中吗?或者状态会被擦除(比如当单元格从屏幕上滚动时)?

Ios 您可以将状态存储在自定义UICollectionViewCell中吗?或者状态会被擦除(比如当单元格从屏幕上滚动时)?,ios,swift,uicollectionview,uicollectionviewcell,Ios,Swift,Uicollectionview,Uicollectionviewcell,如果创建UICollectionViewCell子类,如: class StudentCell: UICollectionViewCell { var student: Student? } 在控制器中,我实现UICollectionView的didSelectItemAtIndexPath并设置变量: func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NS

如果创建UICollectionViewCell子类,如:

class StudentCell: UICollectionViewCell {
    var student: Student?
}
在控制器中,我实现UICollectionView的didSelectItemAtIndexPath并设置变量:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    if let studentCell = collectionView.cellForItemAtIndexPath(indexPath) as? StudentCell {
        studentCell.student = self.someStudent
    }
}
当我点击该单元格时,它应该设置为student,但如果该单元格从屏幕上滚下,整个单元格可能会被擦除,当它回到屏幕上时,它需要在cellForItemAtIndexPath中重建自身

我的问题是,我有一个UICollectionView,其中的单元格不会从存储数据的屏幕上滚动。因为他们没有离开屏幕,我想他们不应该被抹掉,但其中一个细胞似乎没有保持它的变量,这让我觉得它可能被擦除了,我可能需要将单元格外的状态移动到字典或其他地方,在didSelectItemAtIndexPath中,我设置字典,而不是在单元格中设置变量。每当我需要访问数据而不是向单元格索取数据时,我都会在字典中查找


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

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

表格在单元格中显示其数据。单元格与行相关,但不完全相同。单元格是一个视图,它显示了一行数据,而这些数据恰好在此时可见。如果您的表在屏幕上一次可以显示10行,那么它只有10个单元格,即使可能有数百行实际数据。当一行从屏幕上滚动到不可见时,其单元格将被重新用于滚动到屏幕上的新行


是的,我想这是一种方法,但我想看看我是否能简化事情。我现在将状态存储在单元格之外。谢谢