簡體   English   中英

UIView背景顏色不變嗎?

[英]UIView Background Color Not Changing?

當我運行我的應用程序時,背景色不會調整。 Colornumber是一個全局變量。 在AppDelegate.swift中,它初始化為具有0的值。運行應用程序時,第一次調用ViewWillAppear,其值為0。在出現ViewController時調用它。 接下來,將colorNumber變量更改為2后,再次運行viewWillAppear(因為在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)
}

您永遠不要自己調用lifeCycle方法。 因此,您可以調用設置屬性的方法或調用setInitalColor()而不是調用viewWillAppear() setInitalColor()

真正的問題是您要在此語句中創建ViewController的第二個實例:

ViewController().viewWillAppear(false)

那與屏幕上的ViewController 相反,您可以向window詢問其rootViewController ,然后在該window調用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM