如何通过 segue 将图像传递到新的视图控制器?

Posted

技术标签:

【中文标题】如何通过 segue 将图像传递到新的视图控制器?【英文标题】:How to pass images through segue into new view controller? 【发布时间】:2021-03-30 05:58:24 【问题描述】:

我正在尝试通过 segue 将图像传递到新的视图控制器。我能够将标题转移到视图控制器中,但我不断收到错误消息:“无法将'UIImage?.Type'类型的值转换为预期的参数类型'String'”。代码如下:

import UIKit

class DetailViewController: UIViewController 

   var name = ""
    var img: UIImage?
    
    @IBOutlet weak var detailCrystalNameLabel: UILabel!
    @IBOutlet weak var detailCrystalPhotoImageView: UIImageView!
    override func viewDidLoad() 
        super.viewDidLoad()
        
        title = name
        detailCrystalPhotoImageView.image = UIImage(named: img)

    

这是来自视图控制器的代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MainCollectionViewCell", for: indexPath) as! MainCollectionViewCell
        cell.crystalPhotoImageView.image = imageArray[indexPath.row]
        
        
        return cell
    
    
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        let vc = storyboard?.instantiateViewController(identifier: "DetailViewController") as? DetailViewController
        
        vc?.name = nameArray[indexPath.row]
        vc?.img = imageArray[indexPath.row]
        
        self.navigationController?.pushViewController(vc!, animated: true)
    

【问题讨论】:

【参考方案1】:

问题出在这一行detailCrystalPhotoImageView.image = UIImage(named: img)。这里的参数named 是字符串类型。在这里,您正在传递 img ,其中 UIImage 类型。所以你可以解决这个问题

detailCrystalPhotoImageView.image = img

【讨论】:

【参考方案2】:

DetailViewController 中声明的img 变量的类型为UIImageUIImage(named: img) 方法需要图像的字符串名称,而不是图像对象本身。

你必须像这样直接设置图像,

detailCrystalPhotoImageView.image = img

【讨论】:

以上是关于如何通过 segue 将图像传递到新的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间传递 iOS 10 Segue 中的数据 [重复]

强制移动到新的视图控制器(没有 segue)

如何在不使用 segue 的情况下在视图控制器之间传递图像

如何将信息从 MapKit 注释发送到新的视图控制器

关于为啥我的数据没有被传递到新的表格视图的任何想法?

如何将数据从先前的 segue 传递给子视图控制器?