简体   繁体   English

Swift如何从CollectionView中的准备准备中获取单元格

[英]Swift how to get cell from prepare for segue in collectionView

Im using autolayout and for the life of me cannot set the proceeding view controller image view with the previous view controller collection view cell's image. 我正在使用自动布局,并且终生无法使用前一个视图控制器集合视图单元格的图像设置进行中的视图控制器图像视图。 Im using 我正在使用

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    performSegue(withIdentifier: "openDetailView", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "openDetailView" {
        let cell = sender as? ImageCollectionViewCell
        let detailVC = segue.destination as! DetailedImageViewController
        detailVC.imageToPresent = cell?.imageView.image

    }
}

This is the class that I have already set up to receive the image 这是我已经设置的用于接收图像的课程

class DetailedImageViewController : UIViewController{

var imageToPresent: UIImage!
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    imageView.image = imageToPresent
}

} }

The segue performs as expected but the image DOES NOT show in detailedImageViewController. segue可以按预期执行,但是图像不会显示在detailImageViewController中。 Thanks in advance. 提前致谢。

You need to set the imageToPresent into a UIImageview in order to show the image. 您需要将imageToPresent设置为UIImageview才能显示图像。

 
 
 
  
  class DetailedImageViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! var imageToPresent : UIImage! override func viewDidLoad() { super.viewDidLoad() imageView.image = imageToPresent } ...
 
  

It's not a best practice to avoid optional unwrapping in this case. 在这种情况下,最好避免避免可选的展开。 Try to use this code and check the errors if they happen. 尝试使用此代码,并检查错误是否发生。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "openDetailView" {
        guard let cell = sender as? ImageCollectionViewCell else {
            assertionFailure("Failed to unwrap sender. Try to set a breakpoint here and check what sender is") 
            return 
        }
        let detailVC = segue.destination as! DetailedImageViewController
        guard let cellImage = cell.imageView.image else {
            assertionFailure("The cell has no image in image view") 
            return 
        }
        detailVC.imageToPresent = cellImage
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM