UIViewController 在 vi​​ewDidLoad 之前访问子视图

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
    }
    ...
    ...
}