我想将数据发送到另一个控制器而不打开它。 Example
主控制器:
override func viewDidLoad() {
let vc = SecondViewController()
vc.test = "ABCDFER"
}
第二控制器:
var test: String
override func viewDidLoad() {
print(test)
}
怎么做?
答案 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,""))