我想更改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的背景颜色?
答案 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
}