首页 > 解决方案 > 为什么第二个视图控制器在加载入口视图后没有出现,但是通过单击按钮,他出现了?

问题描述

为什么第二个视图控制器在加载入口视图后没有出现,但是通过单击按钮,他出现了?

这是我的代码:

@IBAction func Pressed(_ sender: UIButton) {
    var firstName = FirstName.text;
    var lastName = LastName.text;
    let defaults = UserDefaults.standard;
    defaults.set(firstName, forKey: "FN");
    defaults.set(lastName, forKey: "LN");
    loadNextView()
}
override func viewDidLoad() {
    super.viewDidLoad()
    self.FirstName.text = "TESTAUSGABE";
    let defaults = UserDefaults.standard;
    var fn = defaults.object(forKey: "FN")
    var ln = defaults.object(forKey: "LN")
    if(fn==nil){
        self.FirstName.placeholder="Nicht angegeben"
    }
    else {
        self.FirstName.text = fn as? String
        loadNextView()
    }
    if(ln==nil){
        self.LastName.placeholder="Nicht angegeben"
    }
    else{
        self.LastName.text = ln as? String
        self.Pressed(self.SaveButton);
    }
}
func loadNextView(){
    let storyboard: UIStoryboard = UIStoryboard(name:"Main", bundle:nil);
    let newViewControler = storyboard.instantiateViewController(withIdentifier: "View2") as UIViewController
    self.present(newViewControler, animated: true, completion: nil) 
}

我想检查首选项,如果它们已经设置,那么它应该会自动出现另一个视图。
还是有其他我不知道的方法?

标签: iosviewdidload

解决方案


viewDidLoad由于视图层次结构尚未完成,因此无法在内部展示 VC ,您可以尝试实现viewDidAppearviewWillAppear

var runOnce  = true 

//

override func viewDidAppear(_ animated:Bool){ 
  super.viewDidAppear(animated)
   if runOnce {
      loadNextView() // here read default value 
      runOnce = false 
  }
}

推荐阅读