在不移动ViewController的情况下将数据推送到另一个ViewController

时间:2018-12-21 19:32:57

标签: ios swift xcode variables

我对使用Swift进行编码相对较新。我试图将数据传递回另一个视图控制器,而不必选择与该控制器联系,以便用户可以停留在同一屏幕上。我正在研究使用委托,并且想知道这是否是在多个视图控制器上访问变量的最佳方法。谢谢

视图控制器1:

func passVariables() {


    let passSleepValue = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController
    passSleepValue.getSleepValue = sleepValue




    //navigationController?.pushViewController(passSleepValue, animated: true)


}

View Controller 2:

    func updateDay() {






    let dayScoreAvg = getSleepValue

    dayScore.text = String(format: "%.1f", dayScoreAvg)

    print("Get sleep Value is \(getSleepValue)")

}

1 个答案:

答案 0 :(得分:0)

看起来您已经可以将数据传递给第二个ViewController,但是您不能传递一些数据。

所以一种方法是使用代理模式

首先使用传递数据的方法声明委托协议(在您的情况下,可以只是传递conda install rpy2

String

然后在第二个ViewController中创建protocol SecondVCDelegate: class { func passText(_ text: String) } 变量

delegate

现在您可以在第一个ViewController上实现此协议

class SecondViewController: UIViewController {
    weak var delegate: SecondVCDelegate?
    ...
}

在按下之前,将第二个VC的extension ViewController: SecondVCDelegate { func passText(_text: String) { // do something with text passed from second VC } } 设置为delegate

self

然后在第二个VC中,您可以仅在func passVariables() { let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController viewController.getSleepValue = sleepValue viewController.delegate = self navigationController?.pushViewController(viewController, animated: true) } 上调用方法,而在第一个VC中,此方法将被调用

delegate