Не удалось получить массив с помощью делегата - PullRequest
0 голосов
/ 08 мая 2020

При нажатии кнопки в моем viewcontrollerA я перехожу к viewcontrollerB. От viewcontrollerB I go до viewcontrollerC. И массив изображений, которые у меня есть в viewcontrollerC, я хочу вернуть в viewcontrollerA.

Вот как я пытался добиться этого с делегатами ...

class ViewControllerA: UIViewController,ImageAssetsProtocol {

        override func viewWillAppear(_ animated: Bool) {
            var vc = ViewControllerC()
            vc.delegate = self

        }

     //This below method doesn’t get called
     func sendImageAssets(myData: [MyImageAsset]) {
           print(myData)
       }

}
------------------------------------------------------------------------------------------

class ViewControllerC: UIViewController {

protocol ImageAssetsProtocol {
    func sendImageAssets(myData: [MyImageAsset])
}
 weak var imagePreviewDelegate: ImagePreviewDelegate?



//ViewControllerC gets an array of images from ViewcontrollerB. I’m passing that array to ViewControllerA

  override func viewWillDisappear(_ animated: Bool) {

        self.delegate?.sendImageAssets(myData: selectedAssets)
    }

}

Но после при этом я не получаю массив изображений в ViewControllerA ...

1 Ответ

0 голосов
/ 08 мая 2020

Вот как вы можете продолжить:

  1. Согласовать VC1 с ImageAssetsProtocol и реализовать его метод sendImageAssets(myData:).

    class VC1: UIViewController, ImageAssetsProtocol {
        func openVC2() {
            let vc2 = self.storyboard?.instantiateViewController(withIdentifier: "VC3") as! VC3
            vc2.delegate = self
        }
    
        func sendImageAssets(myData: [MyImageAsset]) {
            print(myData)
        }
    }
    
  2. В VC2 создайте delegate типа ImageAssetsProtocol? и установите vc2.delegate = self при представлении VC2 из VC1

    class VC2: UIViewController {
        var delegate: ImageAssetsProtocol?
    
        func openVC3() {
            let vc3 = self.storyboard?.instantiateViewController(withIdentifier: "VC3") as! VC3
            vc3.delegate = self.delegate
        }
    }
    
  3. В VC3 создайте delegate типа ImageAssetsProtocol? и установите vc3.delegate = self при представлении VC3 из VC2. Вызовите метод делегата sendImageAssets(myData:) в viewWillDisappear(_:).

    class VC3: UIViewController {
        weak var delegate: ImageAssetsProtocol?
    
        override func viewWillDisappear(_ animated: Bool) {
            self.delegate?.sendImageAssets(myData: selectedAssets)
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...