簡體   English   中英

Swift:從AppDelegate設置ViewController背景顏色

[英]Swift: Setting ViewController background color from AppDelegate

我想更改ViewController的背景顏色。 在視圖控制器中,我可以編寫self.view.backgroundColor = UIColor (red: 0, green: 0.0, blue: 0.5, alpha: 1.0) 但是,我需要從AppDelegate進行更改。 根據此答案 ,在AppDelegate中訪問ViewController的屬性的方式如下:

1)設置一個全局變量: var myViewController: ViewController!

2)

var theViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myViewController = theViewController

以便

self.myViewController.view.backgroundColor = UIColor (red: 0, green: 1.0, blue: 0.5, alpha: 1.0)

應該改變背景色。 但是,事實並非如此。 如何從AppDelegate更改ViewController的背景顏色?

您正在使用var theViewController = ViewController()創建視圖控制器的新實例,並將新實例存儲在您設置的全局變量中,但是該實例從未在任何地方使用。

您想要的是應用程序使用的視圖控制器實例。 我不確定如何設置應用程序視圖層次結構,但是您可能想為應用程序獲取根視圖控制器。

在AppDelegate類中,您可以嘗試

theViewController = self.window?.rootViewController
theViewController.view.backgroundColor = UIColor (red: 0, green: 1.0, blue: 0.5, alpha: 1.0)

您可以嘗試說出您的根是否是navigationController

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    // wait until vc is displayed

    DispatchQueue.main.asyncAfter(deadline: .now() + 4) {

        if let vv = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController {

            vv.viewControllers.last?.view.backgroundColor = UIColor.blue
        }
    }

    return true
}

暫無
暫無

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

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