如何将下载图像传递给另一个视图控制器

时间:2018-04-15 15:39:49

标签: swift swift4

我目前正在学习iOS开发,并且想知道如何在点击单元格后将下载的图像传递给另一个视图控制器以显示在那里。因此,用户将点击具有图像的单元格,然后另一个视图控制器将弹出该图像。我使用URLSession下载了图像,然后缓存了图像,这样用户每次向上或向下滚动到他们已经看过的另一个单元格时都不会下载图像。我现在的问题是如何将下载的图像转移到另一个视图控制器?我尝试过这个,但是videoController.thumbnailImageView.image仍然以nil的形式回归。

let imageCache = NSCache<AnyObject, AnyObject>()

override func collectionView(_ collectionView: UICollectionView, 
didSelectItemAt indexPath: IndexPath) {
    let videoController = VideoController()
    let videoUrl = URL(string: Videos[indexPath.item].thumbnail_image_name)
    videoController.titleLabel.text = Videos[indexPath.item].title
    videoController.thumbnailImageView.image = self.imageCache.object(forKey: videoUrl as AnyObject) as? UIImage
    show(videoController, sender: Videos[indexPath.item])
}

以下是我在cellForItemAt indexPath函数中缓存图像的方法。

DispatchQueue.main.async {

    let imageToCache = UIImage(data: data!)
    self.imageCache.setObject(imageToCache!, forKey: urlString as AnyObject)

    cell.thumbnailImageView.image = UIImage(data: data!)
}

1 个答案:

答案 0 :(得分:0)

我明白了。对于任何想知道你必须这样做的人:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! VideoCell
    let videoController = VideoController()
    videoController.titleLabel.text = Videos[indexPath.item].title
    videoController.thumbnailImageView.image = cell.thumbnailImageView.image
    show(videoController, sender: self)
}

您需要在所选索引路径处为单元格项创建单元格。我不确定为什么缓存的方式不起作用,但当我发现时,我会更新这个问题,让其他人不知道。