UIViewController 在 viewDidLoad 之前访问子视图
UIViewController access subviews before viewDidLoad
我有一个 UIViewController 的子类,我定义了一个这样的变量:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
...
...
}
现在,如果我像这样实例化我的自定义视图控制器:
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! CustomController
controller.showSlider = true
问题是第二行甚至可能在 viewDidLoad 或 IBOutlets 设置之前被调用。遇到这种情况怎么办?
当您在演示之前访问插座时,当前代码会崩溃,因此您需要 loadViewIfNeeded
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! Cust omController
controller.loadViewIfNeeded()
controller.showSlider = true
为什么不在控制器的 viewDidLoad
方法中调用 showSlider = true
?
像这样:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
override func viewDidLoad() {
super.viewDidLoad()
showSlider = true
}
...
...
}
我有一个 UIViewController 的子类,我定义了一个这样的变量:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
...
...
}
现在,如果我像这样实例化我的自定义视图控制器:
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! CustomController
controller.showSlider = true
问题是第二行甚至可能在 viewDidLoad 或 IBOutlets 设置之前被调用。遇到这种情况怎么办?
当您在演示之前访问插座时,当前代码会崩溃,因此您需要 loadViewIfNeeded
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CustomController") as! Cust omController
controller.loadViewIfNeeded()
controller.showSlider = true
为什么不在控制器的 viewDidLoad
方法中调用 showSlider = true
?
像这样:
public class CustomController: UIViewController {
@IBOutlet weak var slider:UISlider!
public var showSlider = false {
didSet {
slider.isHidden = !showSlider
}
}
override func viewDidLoad() {
super.viewDidLoad()
showSlider = true
}
...
...
}