如何在解除ViewController时将数据传递给另一个控制器? [英] How to pass data to another controller on dismiss ViewController?

查看:100
本文介绍了如何在解除ViewController时将数据传递给另一个控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将我的数据从一个 ViewController 传递给VC解雇的另一个VC。有可能吗?

I want to pass my data from one ViewController to another VC on VC dismiss. Is it possible?

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

I've tried the next method and no success:

点击按钮点击:

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

当<$ c时$ c> EditViewController 再次出现,我的 segueArray nil 那里。

when EditViewController appears again, my segueArray is nil there.

如何将我的数据从我的ViewController 传递到 EditViewController on解雇?

How can I pass my data from my ViewController to the EditViewController on dismiss?

推荐答案

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

The best way to pass data back to the previous view controller is through delegates... when going from ViewController A to B, pass view controller A as a delegate and on the viewWillDisappear method for ViewController B, call the delegate method in ViewController A.. Protocols would help define the delegate and the required methods to be implemented by previous VC. Here's a quick example:

传递数据的协议:

protocol isAbleToReceiveData {
  func pass(data: String)  //data: string is an example parameter
} 

Viewcontroller A:

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)
  }
}

解雇viewcontroller:

Dismissing viewcontroller:

class viewControllerB: UIViewController {

  var delegate: isAbleToPassData

  viewWillDisappear {
      delegate.pass(data: "someData") //call the func in the previous vc
  }
}

这篇关于如何在解除ViewController时将数据传递给另一个控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆