我有一个集合视图委托
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)
-> UICollectionViewCell {
}
我希望每次调用此方法时,单元格的属性都会持续存在。
let cell = levelView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier,
forIndexPath: indexPath)
但是使用dequeueReusableCellWithReuseIdentifier
检索单元格似乎会创建一个与初始单元格不同的新单元格视图元素。
cell.accessibilityIncrement()
因此,在点击单元格后,单元格可访问性值不会持续存在。 我需要这样做,因为我想通过点击单元格来进行UI测试。
感谢任何帮助!
答案 0 :(得分:1)
iOS中的可重用单元格由队列处理。这有助于tableViews和collectionViews平稳移动,并通过大量数据保持高效。我不认为您会想要改变在您的应用程序中工作的方式。这样,设备只需要将尽可能多的单元加载到内存中,就可以在单个屏幕上显示。当细胞离开屏幕时,它们可以作为另一个细胞重复使用,因为cellForItemAtIndexPath
将被调用以将所需数据加载到重复使用的细胞中。
如果目标是在单元重新加载之间保持值,请考虑使用可由collectionView的dataSource委托管理的映射或其他类似变量。
例如,在包含dataSource委托的viewController中,您可以定义Dictionary
,如下所示:
let numberOfTapsByIndexPath = [NSIndexPath: Int]()
然后,每次点击一个单元格,您都会增加地图中用于点击的单元格的值。该代码可能如下所示:
let previousTaps = numberOfTapsByIndexPath[indexPath]
numberOfTapsByIndexPath[indexPath] = previousTaps + 1
我并非100%确定这是您在上面解释的目标,但无论如何,您都希望将任何持久性信息移出单元格并转移到dataSource委托或其他单例的变量中可以管理。
希望这有帮助!