Ios 为什么viewcontroller segue中的发送方与collection view cell segue相反

Ios 为什么viewcontroller segue中的发送方与collection view cell segue相反,ios,swift,uicollectionview,segue,Ios,Swift,Uicollectionview,Segue,我有一个ViewController,它是CollectionViewDelegate。当用户点击图像时,我想在我的CollectionView中切换到图像的详细视图。我把我手机里的segue连接到细节VC,并使用了这段代码 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { //segue to detail view of image if segue.identifier == "Show

我有一个ViewController,它是CollectionViewDelegate。当用户点击图像时,我想在我的CollectionView中切换到图像的详细视图。我把我手机里的segue连接到细节VC,并使用了这段代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    //segue to detail view of image
    if segue.identifier == "ShowDetail",
       let detailImageView = segue.destination as? CollectionDetailViewController
    {
        detailImageView.imageName = sender as! UIImage
    }
}

显示的错误是“无法将发件人CollectionView转换为UIImage”。相反,当我通过我的VC分离时,我能够将发送者转换为UIImage。为什么会这样?

我不知道是什么或者为什么它在您没有显示的代码中工作。。。但是在这种情况下,如果发送方是一个单元格,您不能简单地声明“现在您是一个UIImage”,因此它是这样的

我假设在集合视图单元格中有一个
UIImageView
,因此更可能需要执行以下操作:

if let cell = sender as? MyCustomCell {
    if let image = cell.theImageView.image as? UIImage {
        detailImageView.imageName = image
    }
}

注意:我只是输入了这个,没有运行它,所以它可能需要一两次调整。

detailImageView.imageName
???听起来像是一个字符串(图像名称)。如果是,这就是为什么不能将其设置为
UIImage
。如果
.imageName
实际上是一个图像,而不是一个字符串,那么什么是
发送方
?它是集合视图单元格吗?如果是这样的话,那就是为什么…imageName是一个图像,对我来说很糟糕。是的,发送者是集合视图单元格,我想知道为什么发送者必须是viewcontroller而不是casting(发送者为!UIImage)才能工作。基本上我的意思是,通过将故事板中的viewcontroller连接到segue,我能够将发送者检测为视图中点击的UIImage。另一方面,如果我将collection view单元格连接到segue,它不会检测单元格中定义的图像,而是会检测发送方作为单元格本身。当我使用viewcontroller连接segue时,为什么图像用作发送方,而不是viewcontroller本身?正如我所说,我不知道,因为我没有查看您的项目。但是试着猜测。。。。您必须做了其他事情才能使
发送者成为
UIImage
。如果它是从代码中调用的,例如,您可以执行
self.performsgue(带有标识符:“test”,发送者:myImage)
.thx!我认为这是因为prepareForSegue只是viewcontroller的一个方法,不能通过像collection view cell这样的对象调用?这是不相关的。假设我定义了一个segue-称之为“testSegue”-我有一个集合视图。。。在
didSelectItemAtIndexPath
func中,我可以执行
self.performSegue(带有标识符:“testSegue”,发送方:UIImage(名为:“image1”))
。。。然后将触发
prepareForSegue
sender
将成为
UIImage
。所以,再一次,不管你之前是如何让
sender
成为
UIImage
的,都有一些事情正在做。您不能在视图上首先放置UIImage,因此它肯定不是简单的“ctrl-drag”和“connect”。