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