ios - 为什么第二个视图控制器在加载入口视图后没有出现,但是通过单击按钮,他出现了?
问题描述
为什么第二个视图控制器在加载入口视图后没有出现,但是通过单击按钮,他出现了?
这是我的代码:
@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)
}
我想检查首选项,如果它们已经设置,那么它应该会自动出现另一个视图。
还是有其他我不知道的方法?
解决方案
viewDidLoad
由于视图层次结构尚未完成,因此无法在内部展示 VC ,您可以尝试实现viewDidAppear
或viewWillAppear
var runOnce = true
//
override func viewDidAppear(_ animated:Bool){
super.viewDidAppear(animated)
if runOnce {
loadNextView() // here read default value
runOnce = false
}
}
推荐阅读
- git - 如何在来自 github 的分叉 repo 上正确同步 master 和分支
- c++ - 整数变量和将整数转换为整数之间的不同结果
- ruby - 如何使 ruby API 调用和 CSV 编写线程安全?
- java - 如何解决 androidx.recyclerview.widget.RecyclerView$ViewHolder.shouldIgnore()' 上的 NullPointer 异常
- visual-studio - 如何将解决方案资源管理器的文件夹结构与我的文件系统(解决方案所属的位置)中的文件夹结构同步?
- laravel - 如何在 laravel mongodb 中对 $match 使用日期过滤器
- android - Android AIDL、proguard、debug 和 release 模式让人头疼
- haskell - Haskell 副产品和数据记录字段限制
- mysql - 在 iBatis 中使用多个更新语句时出错
- protocol-buffers - 反序列化 protobuf 文件时出现意外的组标记错误