单元格在tableview中的collectionview中重用另一个图像

时间:2017-04-22 10:56:23

标签: ios swift uitableview

目前,

我为用户提供了一个Feed 它使用了uitableview和 在tableview中有一个用于多图像的uicollectionview。

'像'或者'评论'功能运作良好 但是当用户点击“喜欢”时会出现一些问题。

我不想显示几处变化, 但是当用户点击“喜欢”时,我需要重新加载一个单元格,它会在短时间内显示另一张图片(重复使用bcs)并返回原始图像。

我尝试使用函数prepareForReuse()。 但是,我不确定如何在重新加载时保持当前屏幕上的相同图像。你知道吗?

有关更多信息, 让我展示我的tableview的一部分< CellForItemAt'和collectionview的方法相同。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "storyCell", for: indexPath) as! StoryPhotoCollectionViewCell

    let imageURL = photoList[indexPath.row]
    let url = URL(string: imageURL)

    DispatchQueue.main.async {
        cell.imageView.kf.setImage(with: url, placeholder: #imageLiteral(resourceName: "imageplaceholder"), options: nil, progressBlock: nil, completionHandler: nil)
    }

    cell.imageView.kf.indicatorType = .activity

    return cell
}

collectionView的数据源是photoList数组,所以在tableview中,我有这个代码。

DispatchQueue.main.async { 
        cell.photoList = (story.imageArray?.components(separatedBy: ",").sorted())!
    }

2 个答案:

答案 0 :(得分:0)

问题应该是由于图像的异步下载延迟,

我相信你的代码会像这样

cell.image = nil; // or some placeholder image
cell.image = downloadFromURL(SOME_URL)

在分配图像之前添加此单行代码

<xsl:template match="/graph">
    <xsl:for-each select="tag[starts-with(@name, 'A_start')] ">
        <xsl:if test="not(following-sibling::tag[@name=concat('A_end', substring-after(current()/@name, 'A_start'))])">
            <xsl:copy-of select="."/>
        </xsl:if>
    </xsl:for-each>
</xsl:template>

如果可能,请提供更多信息

答案 1 :(得分:0)

如果我理解你的问题,你需要:

  1. 当状态发生变化时,您可以更改图像,此图像可以存储为应用程序或外部的一部分。如果它是相同的图像,则需要保持缓存。
  2. 你启动一个计时器,如:

    让countTimeBeforeChangeMyImageBack = DispatchTime.now()+。秒(waitTimeBeforeStartCounting)

    DispatchQueue.main.asyncAfter(截止日期:deadlineTime,执行:{         self.YourMethodToChangeYourImageBack     })

  3. 在您的方法YourMethodToChangeYourImageBack中,您将原始图像设置回来。 在这里,请记住您可能需要在更新UI之前加入主线程:

    //在回调后重新加入主队列 DispatchQueue.main.sync(){     //您的代码更新图像 }

  4. 希望它有所帮助。