2017-05-12 10 views
0

2つのVCの間でデリゲートを使用してデータを渡そうとしていますが、なぜ動作しないのかわかりません。Modal Segueを使用して2つのVC間で画像を渡す

私の最初のVC

class ViewController: UIViewController { 

    @IBOutlet weak var profileImage: UIImageView! 

    func downloadPhoto() { 

     self.performSegue(withIdentifier: "showPhotoFromInternet", sender: nil) 

    } 

} 

extension ViewController: IPresentaionPhotoFormInternetDelegate { 

    func setNewImage(imageToShow: UIImage) { 
     profileImage.image = imageToShow 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let destination = segue.destination as? PresentPhotoFromInternetViewController { 
      destination.delegate = self 
     } 
    } 

私の第二VC

class PresentPhotoFromInternetViewController: UIViewController { 

var imageToSend: UIImage? 
var delegate: IPresentaionPhotoFormInternetDelegate? 
@IBOutlet weak var photoCollectionView: UICollectionView! 

override func viewDidLoad() { 
     super.viewDidLoad() 

     photoCollectionView.allowsMultipleSelection = false 

} 

    @IBAction func sendPhotoToPreviousController(_ sender: Any) { 

     delegate?.setNewImage(imageToShow: iamgeToSend!) 
     performSegue(withIdentifier: "sendPhoto", sender: nil) 

    } 

extension PresentPhotoFromInternetViewController: UICollectionViewDelegate, UICollectionViewDataSource { 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

     let cell = collectionView.cellForItem(at: indexPath) as! photoCollectionViewCell 

     print("Cell is selected") 
     iamgeToSend = cell.photoImageView.image 
     cell.selectedView.backgroundColor = UIColor.green 
    } 

protocol IPresentaionPhotoFormInternetDelegate { 

    func setNewImage(imageToShow: UIImage) 

} 

私は2番目に最初のVCからのために存在modalyセグエを使用し、ショーは最初

に2番目を形成2番目のVCからsegueを実行すると、すべてのブレークポイントを通過しますが、最初のVCには更新がありません。

+0

代理人はどこに割り当てられますか? – KKRocks

答えて

2

問題ではなく、コントローラをポップであり、あなたのボタンアクションで

@IBAction func sendPhotoToPreviousController(_ sender: Any) { 

    delegate?.setNewImage(imageToShow: iamgeToSend!) 
    //Comment or remove the performSegue 
    //performSegue(withIdentifier: "sendPhoto", sender: nil) 

    //Now simply pop this controller 
    _ = self.navigationController?.popViewController(animated: true) 

    // If you are presenting this controller then you need to dismiss 
    self.dismiss(animated: true) 
} 

を完全に新しいコントローラをロードしている注:あなたがセグエある場合、よりpopViewControllerを使用するか、それがModalの一種であるPushの一種でありますdismissを使用する必要があります。

関連する問題