2017-12-14 18 views
0

私はautolayoutを使用していますが、私の人生のために、前のビューコントローラのビュービューのセルの画像で進行中のビューコントローライメージビューを設定することはできません。予想通りイム使用してcollectionViewでセグを準備するセルを取得する方法をスウィフト

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 
} 

}

セグエは実行しますが、画像はdetailedImageViewControllerには表示されません。前もって感謝します。

+0

はトリックをした:performSegue(withIdentifier: "openDetailView"、差出人:(のcollectionView.cellForItem:indexPath)) – NojDavid

答えて

0

画像を表示するには、imageToPresentをUIImageviewに設定する必要があります。

class DetailedImageViewController: UIViewController { 

    @IBOutlet weak var imageView: UIImageView! 

    var imageToPresent : UIImage! 

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

+0

は申し訳ありませんが、私は、私は、これはあなたがすることができ – NojDavid

+0

設定しているかということに言及するのを忘れviewDidLoadを使用する代わりに、viewWillAppearでコードをロードしてみてください。 viewDidLoadは、viewControllerのビューが読み込まれたときに初めて呼び出されます –

0

それは、この場合には、オプションのアンラップを回避するためのベストプラクティスではありません。このコードを使用して、エラーが発生した場合はそれを確認してください。 didSelectItemAt本体を変更

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 
    } 
} 
関連する問題