【问题标题】:Swift how to get cell from prepare for segue in collectionViewSwift如何从为collectionView中的segue做准备中获取单元格
【发布时间】:2018-05-28 02:33:29
【问题描述】:

我正在使用自动布局,并且在我的一生中无法使用前一个视图控制器集合视图单元格的图像设置正在进行的视图控制器图像视图。我正在使用

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

    }
}

这是我已经设置好的接收图片的类

class DetailedImageViewController : UIViewController{

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

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

}

segue 按预期执行,但图像未显示在 detailImageViewController 中。提前致谢。

【问题讨论】:

  • 更改 didSelectItemAt 正文成功了:performSegue(withIdentifier: "openDetailView", sender: collectionView.cellForItem(at: indexPath))

标签: ios swift3 uicollectionview uistoryboardsegue


【解决方案1】:

在这种情况下,避免可选展开并不是最佳做法。尝试使用此代码并检查是否发生错误。

 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
    }
}

【讨论】:

    【解决方案2】:

    您需要将 imageToPresent 设置为 UIImageview 以显示图像。

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

    【讨论】:

    • 对不起,我忘了说我确实有这个设置
    • 您可以尝试在 viewWillAppear 中加载代码,而不是使用 viewDidLoad。仅在第一次加载 viewController 的视图时调用 viewDidLoad
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多