背景颜色的整体变化

时间:2019-01-12 07:12:51

标签: ios swift colors background

所以问题是我对背景颜色进行了全局更改。我为按钮编写了代码,该按钮通过UserDefaults中的键保存背景颜色,然后在主屏幕的view.backgroundColor中插入了viewDidLoad,但它仅在该屏幕上更改了颜色。如何在全球范围内更改?

1 个答案:

答案 0 :(得分:1)

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