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 更改它。根据 this answer,在 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 的背景颜色?

你可以试试看,如果你的root是一个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
}

您正在使用 var theViewController = ViewController() 创建视图控制器的新实例,并将新实例存储在您设置的全局变量中,但该实例从未在任何地方使用。

你要的是app使用的view controller实例。我不确定您的应用视图层次结构是如何设置的,但您可能想为您的应用获取根视图控制器。

在AppDelegate中class你可以试试

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