无法理解集合视图中的恢复单元格
Posted
技术标签:
【中文标题】无法理解集合视图中的恢复单元格【英文标题】:Trouble understanding resuming cells in collection views 【发布时间】:2015-06-29 20:04:04 【问题描述】:我正在关注一个帮助快速学习的网站,但我对这里的这部分感到困惑。基本上我们添加了 if cell.imageview.image == nil 语句,所以当集合视图加载并且您滚动图像时不会重新加载过滤器。我不明白的是,如果你向下滚动一个单元格被重用于底行,现在为什么如果我向上滚动它不必重新加载过滤器?该数据是否保存在某处,所以当我向上滚动属性时不必重新填充?如果是这样,我为什么要使用那个 if 语句?
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! FilterCell
if cell.imageView.image == nil
cell.imageView.image = placeholder
let filterQueue: dispatch_queue_t = dispatch_queue_create("filter queue", nil)
dispatch_async(filterQueue, () -> Void in
let filterImage = self.filteredImageFromImage(self.thisFeeditem.thumbNail, filter: self.filters[indexPath.row])
dispatch_async(dispatch_get_main_queue(), () -> Void in
cell.imageView.image = filterImage
)
)
return cell
【问题讨论】:
【参考方案1】:当一个单元格被重用时,一个已经分配的单元格对象会再次被使用。为其设置的任何属性或数据都将保留。
当您向上滚动时,单元格已经设置了它的图像,因此它不会重新加载新的过滤图像。
【讨论】:
好的,这就是我要找的答案。现在如何在集合视图中更改数据。例如,当我向下滚动时,会出现在顶部的模糊滤镜现在位于底部? 我需要更多关于您如何实施过滤器的信息,以便对它进行测试! 属性在哪里保留,但如果重复使用,则属性会被数据覆盖 只有在“cellForItemAtIndexPath”方法中再次覆盖属性时,才会覆盖这些属性。从dequeueReusableCell...
返回的单元格只是调用prepareForReuse
后再次返回的旧对象。【参考方案2】:
无论您向上或向下滚动,都可以重复使用单元格。您应该假设返回的单元格是不同项目的缓存版本。因此,它可能已经与另一个单元格的数据绑定,并且您希望始终使用正确的项目数据重新绑定单元格。
【讨论】:
以上是关于无法理解集合视图中的恢复单元格的主要内容,如果未能解决你的问题,请参考以下文章