无法理解集合视图中的恢复单元格

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】:

无论您向上或向下滚动,都可以重复使用单元格。您应该假设返回的单元格是不同项目的缓存版本。因此,它可能已经与另一个单元格的数据绑定,并且您希望始终使用正确的项目数据重新绑定单元格。

【讨论】:

以上是关于无法理解集合视图中的恢复单元格的主要内容,如果未能解决你的问题,请参考以下文章

集合视图,具有自定义布局,单元格在滚动时行为不端

在表格视图中的所有单元格都已加载后,重新加载表格视图单元格内的集合视图

无法加载集合视图单元格

无法在集合视图中创建单元格?

将数据从集合视图单元格移动到新的集合视图单元格

表格单元格中的集合视图。这是重用的错误