Swift: настройка цвета фона ViewController из AppDelegate - PullRequest
0 голосов
/ 10 мая 2018

Я хочу изменить цвет фона моего ViewController. В контроллере вида я могу написать self.view.backgroundColor = UIColor (red: 0, green: 0.0, blue: 0.5, alpha: 1.0). Тем не менее, мне нужно изменить его из AppDelegate. Согласно этому ответу , доступ к свойствам ViewController в AppDelegate работает следующим образом:

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)

должен изменить цвет фона. Однако это не так. Как я могу изменить цвет фона ViewController с AppDelegate?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы создаете новый экземпляр контроллера представления с var theViewController = ViewController() и сохраняете новый экземпляр в глобальной переменной, которую вы установили, но этот экземпляр никогда нигде не используется.

То, что вы хотите, этоэкземпляр контроллера представления, используемый приложением.Я не уверен, как настроена иерархия представления вашего приложения, но вы, вероятно, хотите получить корневой контроллер представления для своего приложения.

В классе AppDelegate вы можете попробовать

theViewController = self.window?.rootViewController
theViewController.view.backgroundColor = UIColor (red: 0, green: 1.0, blue: 0.5, alpha: 1.0)
0 голосов
/ 10 мая 2018

Вы можете попробовать, скажем, если ваш корень - навигационный контроллер

 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
}
...