UICollectionView 单元格不保留数据 --- 如何使它们的数据持久化?
Posted
技术标签:
【中文标题】UICollectionView 单元格不保留数据 --- 如何使它们的数据持久化?【英文标题】:UICollectionView Cells Are Not Retaining Data --- How Can I Make Their Data Persistent? 【发布时间】:2015-01-07 01:07:27 【问题描述】:我有一个充满自定义单元格对象的 UICollectionView。
当用户选择一个时,我画一个圆圈并在中间放一个数字。
但是,当用户向下滚动然后向后滚动时,所选单元格的数字数据全部混乱。
我深入研究了问题所在,结果发现单元格没有被缓存,当您使用 UICollectionView 向上滚动时,它会创建新的单元格资产,因为其中的此类数据被破坏(因此我可以t 在其中存储一个数字)。所以我的想法是每次该单元格重新出现在屏幕上时都将数字放回原处,但我无法确定何时显示单元格。
我制作了一张地图,记录了所选单元格的 NSIndexPath。但是,我不知道如何判断当前是否正在显示该路径(即该路径上的单元格)。
你知道我如何判断一个单元格是否在滚动的任何点从 NSIndexPath 显示吗?
这是我用于选择的单元格代码(我的 UICollectionView 调用它)。
override public var selected: Bool
didSet
_checkMark?.hidden = !selected
_number?.hidden = !selected
println("did set")
func setNumberText(number:UInt8)
if(_number == nil)
_number = UILabel(frame: CGRectMake(0,0,1,1))
addSubview(_number)
_number.text = String(number)
_number.sizeToFit()
_number.frame = CGRectMake(_checkMark.frame.width/2 - _number.frame.width/2, _checkMark.frame.height/2 - _number.frame.height, _checkMark.frame.width, _checkMark.frame.height)
_numberInt = number
我可以跟踪一些“cellAtPathIsNowOnScreen”事件吗?
【问题讨论】:
【参考方案1】:你做错了。当您滚动时,单元格会被重用,而发生这种情况的方法是您不了解的实现细节。
相反,您应该将有关单元格应绘制什么的数据(在本例中为数字)存储在您的集合视图的数据源中。然后在-
collectionView:cellForItemAtIndexPath:
中,您可以告诉单元格在出列后要绘制什么数字,或者如果不应该为该特定单元格绘制数字,则清除该值。
此外,UICollectionView
确实有一个 - visibleCells
方法,该方法将返回当前可见的所有单元格的数组,但这确实不是您想要做的。
【讨论】:
啊,有趣。我一直在做didSelectItemAtIndexPath
调用中的逻辑。我会马上调查的,谢谢!
工作就像一个魅力。我现在检查是否在该方法中选择了单元格并相应地设置其值。穆乔·格拉西亚斯!以上是关于UICollectionView 单元格不保留数据 --- 如何使它们的数据持久化?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UICollectionView 拖放期间删除“幽灵”单元格,并使移动单元格不透明?
UICollectionView 两个具有相同视图的单元格。第二个单元格不显示任何内容
自动调整嵌入在 UITableView 中的 UICollectionView 单元格不起作用
iOS Swift UICollectionView 照片浏览 - 当单元格不可见时如何停止取消 DispatchQueue