Swift:从AppDelegate

时间:2018-05-10 17:11:25

标签: ios swift uiviewcontroller appdelegate uibackgroundcolor

我想更改ViewController的背景颜色。在视图控制器中,我可以编写self.view.backgroundColor = UIColor (red: 0, green: 0.0, blue: 0.5, alpha: 1.0)。 但是,我需要从AppDelegate更改它。根据{{​​3}},访问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的背景颜色?

2 个答案:

答案 0 :(得分:1)

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

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

在AppDelegate类中,您可以尝试

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

答案 1 :(得分:0)

你可以尝试,比如你的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
}