将数据发送到另一个控制器 - 没有他去

时间:2018-03-26 17:36:07

标签: ios swift xcode swift3 controller

我想将数据发送到另一个控制器而不打开它。 Example

主控制器:

override func viewDidLoad() {
   let vc = SecondViewController()
   vc.test = "ABCDFER"
}

第二控制器:

var test: String

override func viewDidLoad() {
   print(test)
}

怎么做?

3 个答案:

答案 0 :(得分:1)

这对我有用

class ViewController: UIViewController {


    var otherViewController: OtherViewController!

    override func viewDidLoad() {
        super.viewDidLoad()
        otherViewController = OtherViewController()
        otherViewController.test = "ABCDFER"
    }

    @IBAction func press() {
        self.show(self.otherViewController, sender: nil)
    }

}

class OtherViewController: UIViewController {


    var test: String!

    override func viewDidLoad() {
        super.viewDidLoad()
        print(test)
    }
}

答案 1 :(得分:0)

Main控制器中,只要viewDidLoad()完成,SecondViewController的实例就会被销毁/取消分配。如果您想在SecondViewController处设置一个值,那么您可以"使用"稍后,您需要保留对该实例的引用:

所以,在主控制器中:

var secondVC: SecondViewController?

override func viewDidLoad() {
   secondVC = SecondViewController()
   secondVC.test = "ABCDFER"
}

现在,稍后 - 也许是按下按钮 - 你想要使用那个相同的实例:

@IBAction func buttonTap(_ sender: Any) {
    print("test in secondVC:", secondVC?.test)
}

答案 2 :(得分:0)

请记住视图生命周期,如果视图viewDidLoad()仅在通过xib加载视图时执行,或者与控制器一起执行视图相关操作时执行,例如addSubview()。

正在传递该值,并且在主控制器处于活动状态时不会释放该值。

您可以强制调用生命周期事件,但根本不推荐。

class OtherViewController: UIViewController {
    var test: String!

    override func viewDidLoad() {
        super.viewDidLoad()
        print(test)
    }
}

}

=TEXTJOIN(",",TRUE,IF(LEFT(A2,1)="1",$B$1,""),IF(MID(A2,2,1)="1",$C$1,""),IF(MID(A2,3,1)="1",$D$1,""),IF(RIGHT(A2,1)="1",$E$1,""))