Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIView背景色不变?_Ios_Swift_Uiview_View_Uibackgroundcolor - Fatal编程技术网

Ios UIView背景色不变?

Ios UIView背景色不变?,ios,swift,uiview,view,uibackgroundcolor,Ios,Swift,Uiview,View,Uibackgroundcolor,当我运行应用程序时,背景色不会调整。Colornumber是一个全局变量。在AppDelegate.swift中,它被初始化为值0。当应用程序运行时,首次调用值为0的ViewWillAppeal。当ViewController出现时,将调用它。接下来,在colorNumber变量更改为2后,将再次运行ViewWillAppeal(因为它在DidFinishLaunchingWithOptions中调用)。程序进入第二个条件(因为它正确地打印出“我们处于第二个条件”)。但是,背景色仍为绿色。为什么

当我运行应用程序时,背景色不会调整。Colornumber是一个全局变量。在AppDelegate.swift中,它被初始化为值0。当应用程序运行时,首次调用值为0的ViewWillAppeal。当ViewController出现时,将调用它。接下来,在colorNumber变量更改为2后,将再次运行ViewWillAppeal(因为它在DidFinishLaunchingWithOptions中调用)。程序进入第二个条件(因为它正确地打印出“我们处于第二个条件”)。但是,背景色仍为绿色。为什么背景色不会变为蓝色?谢谢

ViewController.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()
    }
}
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
}

切勿亲自调用
视图(或任何其他视图控制器生命周期方法)。在适当的时候将调用它。不要自己调用
视图(或任何其他视图控制器生命周期方法)。它将在适当的时候被调用。该方法有效!我已经更新了我的帖子来展示什么对我有效。你需要让你的问题保持原样,这样整个问题和答案都有意义。这种方法有效!我已经更新了我的帖子来展示什么对我有效。你需要保持你的问题不变,这样整个问题和答案才有意义。