【问题标题】:Not able to get array using delegate无法使用委托获取数组
【发布时间】:2020-05-08 07:44:59
【问题描述】:

在我的viewcontrollerA 中单击一个按钮,我将转到viewcontrollerB。从viewcontrollerB 我去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 中的图像数组...

【问题讨论】:

    标签: ios swift delegates


    【解决方案1】:

    您可以按照以下方式进行操作:

    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,同时从VC1 呈现VC2

      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,同时从VC2 呈现VC3。在viewWillDisappear(_:)中调用代理方法sendImageAssets(myData:)

      class VC3: UIViewController {
          weak var delegate: ImageAssetsProtocol?
      
          override func viewWillDisappear(_ animated: Bool) {
              self.delegate?.sendImageAssets(myData: selectedAssets)
          }
      }
      

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多