配置 UICollectionView 以保持相同的单元格视图
Posted
技术标签:
【中文标题】配置 UICollectionView 以保持相同的单元格视图【英文标题】:Configuring UICollectionView to keep the same cell view 【发布时间】:2016-02-03 12:48:46 【问题描述】:我有一个集合视图委托
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)
-> UICollectionViewCell
我希望单元格的属性在每次调用此方法之间保持不变。
let cell = levelView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier,
forIndexPath: indexPath)
但使用dequeueReusableCellWithReuseIdentifier
检索单元格似乎会创建一个与初始元素不同的新单元格视图元素。
cell.accessibilityIncrement()
因此,在点击单元格后,单元格可访问性值无法保留。 我需要这样做,因为我想通过点击单元格来进行 UI 测试。
感谢任何帮助!
【问题讨论】:
【参考方案1】:ios 中的可重用单元是通过队列处理的。这有助于 tableViews 和 collectionViews 平滑移动并在处理大量数据时保持高效。我认为您不会想要更改设计为在您的应用程序中工作的方式。这样,设备只需将尽可能多的单元格加载到内存中即可在单个屏幕上显示。随着单元格移出屏幕,它们可以作为另一个单元格重复使用,因为将调用 cellForItemAtIndexPath
将所需的数据加载到重复使用的单元格中。
如果目标是在单元格重新加载之间保持值,请考虑使用地图或其他可以由 collectionView 的 dataSource 委托管理的类似变量。
例如,在包含 dataSource 委托的 viewController 中,您可以像这样定义 Dictionary
:
let numberOfTapsByIndexPath = [NSIndexPath: Int]()
然后每次点击一个单元格时,您都会在地图中为点击的单元格增加值。该代码可能如下所示:
let previousTaps = numberOfTapsByIndexPath[indexPath]
numberOfTapsByIndexPath[indexPath] = previousTaps + 1
我不能 100% 确定这是您在上面解释的目标,但无论如何,您都希望将任何持久性信息移出单元格并放入 dataSource 委托或其他单例可以管理的变量中。
希望这会有所帮助!
【讨论】:
感谢您的回答。实际上,我的目标是进行 UI 测试,我想检查单元格的 backgroundView 属性是否发生了变化。我不确定是否值得为测试添加一个额外的变量。关于如何做到这一点的任何想法? 如果您只需要每个单元格上的唯一标识符以实现可访问性,请考虑将可访问性标识符分配给可以在代码中确定的内容,例如cell.accessibilityIdentifier = "CollectionCell-\(indexPath.section)-\(indexPath.item)"
以上是关于配置 UICollectionView 以保持相同的单元格视图的主要内容,如果未能解决你的问题,请参考以下文章
即使我们滚动,如何将部分标题保持在顶部:UICollectionView
手动滚动显示相同内容的两个 UICollectionView
如何以编程方式创建和使用 UIcollectionView?