配置UICollectionView以保持相同的单元视图

时间:2016-02-03 12:48:46

标签: ios uicollectionview

我有一个集合视图委托

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)
    -> UICollectionViewCell {
}

我希望每次调用此方法时,单元格的属性都会持续存在。

let cell = levelView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier,
      forIndexPath: indexPath)

但是使用dequeueReusableCellWithReuseIdentifier检索单元格似乎会创建一个与初始单元格不同的新单元格视图元素。

cell.accessibilityIncrement()

因此,在点击单元格后,单元格可访问性值不会持续存在。 我需要这样做,因为我想通过点击单元格来进行UI测试。

感谢任何帮助!

1 个答案:

答案 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委托或其他单例的变量中可以管理。

希望这有帮助!