简体   繁体   English

UIViewController在viewDidLoad之前访问子视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM