UIView 背景颜色不变?



当我运行我的应用程序时,背景颜色不会调整。颜色数字是一个全局变量。在 AppDelegate.swift 中,它初始化为具有值 0。当应用程序运行时,第一次调用 ViewWillAppear,值为 0。当视图控制器出现时调用它。接下来,viewWillAppear在colorNumber变量更改为2后再次运行(因为它在DidFinishLaunchingWithOptions中被调用(。程序进入第二个条件(因为它正确打印出"我们处于第二个条件"(。但是,背景颜色保持绿色。为什么背景颜色不变为蓝色?谢谢。

视图控制器.swift:

var colorNumber: Int!
class ViewController: UIViewController {
func setInitialColor() {
if colorNumber! == 1 {
self.view.backgroundColor = .green
print("We're in the First Condition")
}
else if colorNumber! == 2 {
self.view.backgroundColor = .blue
print("We're in the second condition")
}
}
override func viewWillAppear(_ animated: Bool) {
self.setInitialColor()
}
}

应用委托.swift:

func application(_ application: UIApplication, 
didFinishLaunchingWithOptions launchOptions: 
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
colorNumber = 0
colorNumber = 1
ViewController().viewWillAppear(false)
}

你永远不应该自己调用生命周期方法。 因此,您可以调用设置属性或调用setInitalColor()的方法,而不是调用viewWillAppear()

您真正的问题是您正在此语句中创建ViewController的第二个实例:

ViewController().viewWillAppear(false)

这与屏幕上的ViewController不同。 相反,您可以向window询问其rootViewController,然后致电setInitialColor()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
colorNumber = 2
let vc = window?.rootViewController as? ViewController
vc?.setInitialColor()  // color is now blue!
return true
}

最新更新