如何在解除ViewController时将数据传递给另一个控制器?

Joh*_*Doe 8 storyboard uiviewcontroller ios uistoryboardsegue swift

我希望ViewController在VC解雇时将我的数据从一个VC 传递给另一个VC.可能吗?

我尝试过下一个方法但没有成功:

点击按钮:

self.dismiss(animated: true) { 
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "EditViewController") as! EditViewController
        controller.segueArray = [values]
    }
Run Code Online (Sandbox Code Playgroud)

EditViewController再次出现时,我segueArraynil在那里.

如何将我的数据传递my ViewControllerEditViewController解雇?

the*_*_27 11

将数据传递回前一个视图控制器的最佳方法是通过委托......当从ViewController A转到B时,将视图控制器A作为委托传递,并在ViewController B的viewWillDisappear方法上,在ViewController A中调用委托方法.协议将有助于定义代理以及之前VC要实现的所需方法.这是一个简单的例子:

传递数据的协议:

protocol isAbleToReceiveData {
  func pass(data: String)  //data: string is an example parameter
} 
Run Code Online (Sandbox Code Playgroud)

Viewcontroller A:

class viewControllerA: UIViewController, isAbleToReceiveData {

  func pass(data: String) { //conforms to protocol
  // implement your own implementation
   }

  prepare(for: Segue) {
    /** code for passing data **/
    let vc2 = ViewCOntrollerB()  /
    vc2.delegate = self   //sets the delegate in the new viewcontroller 
                          //before displaying
    present(vc2)
  }
}
Run Code Online (Sandbox Code Playgroud)

解除viewcontroller:

class viewControllerB: UIViewController {

  var delegate: isAbleToReceiveData

  viewWillDisappear {
      delegate.pass(data: "someData") //call the func in the previous vc
  }
}
Run Code Online (Sandbox Code Playgroud)

  • `var委托:isAbleToPassData`此代码抛出错误。它应该是“ var委托:isAbleToPassData!” (2认同)