Глобальное изменение цвета фона - PullRequest
0 голосов
/ 12 января 2019

Так что проблема в том, что я делаю глобальное изменение цвета фона. Я сделал код для кнопки, которая сохраняет цвет фона с помощью ключа в UserDefaults, затем я вставил view.backgroundColor в viewDidLoad основного экрана, но он меняет цвет только на этом экране. Как я могу изменить это глобально?

1 Ответ

0 голосов
/ 12 января 2019

Создайте подкласс для UIViewController, у которого есть наблюдатель уведомлений для изменения цвета фона, и сделайте ваши контроллеры представления его подклассом. После этого поместите сообщение с уведомлением в блок didSet вашей пользовательской переменной по умолчанию.

class CustomBgColorViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UserPrefs.customBgColor

        NotificationCenter.default.addObserver(self, selector: #selector(shouldChangeBgColor), name: .shouldChangeBgColor, object: nil)
    }

    @objc fileprivate func shouldChangeBgColor() {
        view.backgroundColor = UserPrefs.customBgColor
    }
}

extension Notification.Name {
    static let shouldChangeBgColor = Notification.Name(rawValue: "shouldChangeBgColor")
}

struct UserPrefs {
    static var customBgColor: UIColor! {
        didSet {
            [...]

            NotificationCenter.default.post(name: .shouldChangeBgColor, object: nil)
        }
    }
}
...