[英]UIViewController access subviews before viewDidLoad
I have a subclass of UIViewController and I define a variable like this: 我有一个UIViewController的子类,并且定义了一个像这样的变量:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
...
...
}
And now if I instantiate my custom view controller like this: 现在,如果我实例化我的自定义视图控制器,如下所示:
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! CustomController
controller.showSlider = true
The problem is the second line may be called even before viewDidLoad or IBOutlets are even set. 问题是,甚至在设置viewDidLoad或IBOutlets之前,第二行都可能被调用。 How to deal with a situation like this?
如何处理这种情况?
The current code will crash as you access the outlet before presentation , so You need loadViewIfNeeded
在演示前访问插座时,当前代码将崩溃,因此您需要
loadViewIfNeeded
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! Cust omController
controller.loadViewIfNeeded()
controller.showSlider = true
Why don't you call showSlider = true
in controller's viewDidLoad
method? 为什么不在控制器的
viewDidLoad
方法中调用showSlider = true
?
Like this: 像这样:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
override func viewDidLoad() {
super.viewDidLoad()
showSlider = true
}
...
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.