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)
我想更改 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)