Ios UIView背景色不变?
当我运行应用程序时,背景色不会调整。Colornumber是一个全局变量。在AppDelegate.swift中,它被初始化为值0。当应用程序运行时,首次调用值为0的ViewWillAppeal。当ViewController出现时,将调用它。接下来,在colorNumber变量更改为2后,将再次运行ViewWillAppeal(因为它在DidFinishLaunchingWithOptions中调用)。程序进入第二个条件(因为它正确地打印出“我们处于第二个条件”)。但是,背景色仍为绿色。为什么背景色不会变为蓝色?谢谢 ViewController.swift:Ios UIView背景色不变?,ios,swift,uiview,view,uibackgroundcolor,Ios,Swift,Uiview,View,Uibackgroundcolor,当我运行应用程序时,背景色不会调整。Colornumber是一个全局变量。在AppDelegate.swift中,它被初始化为值0。当应用程序运行时,首次调用值为0的ViewWillAppeal。当ViewController出现时,将调用它。接下来,在colorNumber变量更改为2后,将再次运行ViewWillAppeal(因为它在DidFinishLaunchingWithOptions中调用)。程序进入第二个条件(因为它正确地打印出“我们处于第二个条件”)。但是,背景色仍为绿色。为什么
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()
}
}
AppDelegate.swift:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
colorNumber = 0
colorNumber = 1
ViewController().viewWillAppear(false)
}
您不应该自己调用生命周期方法。因此,您可以调用一个设置属性的方法或调用
setInitalColor()
,而不是调用viewwillispect()
您真正的问题是,您正在此语句中创建ViewController
的第二个实例:
ViewController().viewWillAppear(false)
这与屏幕上的ViewController
不同。相反,您可以向窗口
询问其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
}
您不应该自己调用生命周期方法。因此,您可以调用一个设置属性的方法或调用
setInitalColor()
,而不是调用viewwillispect()
您真正的问题是,您正在此语句中创建ViewController
的第二个实例:
ViewController().viewWillAppear(false)
这与屏幕上的ViewController
不同。相反,您可以向窗口
询问其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
}
切勿亲自调用
视图(或任何其他视图控制器生命周期方法)。在适当的时候将调用它。不要自己调用视图(或任何其他视图控制器生命周期方法)。它将在适当的时候被调用。该方法有效!我已经更新了我的帖子来展示什么对我有效。你需要让你的问题保持原样,这样整个问题和答案都有意义。这种方法有效!我已经更新了我的帖子来展示什么对我有效。你需要保持你的问题不变,这样整个问题和答案才有意义。