gpt4 book ai didi

ios - 通过 UserDefault 设置更新子类 UIButton 的属性

转载 作者:行者123 更新时间:2023-11-28 12:24:28 24 4
gpt4 key购买 nike

我已经将 UIButton 子类化以在我的整个项目中使用。这些 UIButton 子类的边框颜色会根据用户在设置中的选择而变化。该设置与 UserDefaults 一起保存。

问题:当我第一次加载应用程序时,按钮边框是正确的颜色 - 但是,当我更改设置(最终更改按钮边框)时 - 没有任何反应。只有在我关闭应用程序并重新打开后,按钮才会改变颜色。

我的代码

class CustomSeasonButton: UIButton {
var seasonCold = Bool()
let nsDefaults = UserDefaults.standard
var notification = Notification(name: Notification.Name(rawValue: "themeChanged"))

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// ...
self.seasonCold = nsDefaults.bool(forKey: "savedSeasonDefault")
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshButtonBorder), name: notification.name, object: nil)

refreshButtonBorder()
}

func refreshButtonBorder() {
print("Notification Received")
if seasonCold {
seasonCold = false
self.layer.borderColor = UIColor.blue
}
else {
seasonCold = true
self.layer.borderColor = UIColor.red
}
}


}

设置

class SettingsVC: UITableViewController {
//...
var notification = Notification(name: Notification.Name(rawValue: "themeChanged"))
//...
}

然后在季节选择的 IBAction 中 - 我有以下内容:

NotificationCenter.default.post(notification)

正如您从我上面的代码中看到的那样,按钮边框颜色应该在蓝色和红色之间切换,具体取决于使用 UserDefaults 选择的内容。

要更改边框颜色的唯一方法是关闭应用程序并重新打开它。

问题:如何确保 UIButton 子类在每次更新设置 (UserDefaults) 时都会更改边框颜色?谢谢!

最佳答案

seasonCold = false {
didSet {
refreshButtonBorder()
}
}


func refreshButtonBorder() {
if seasonCold {
self.layer.borderColor = UIColor.blue
}
else {
self.layer.borderColor = UIColor.red
}
}

并在您更改用户默认值“savedSeasonDefault”时设置 seasonCold

对于一对多调用使用 NotificationCenter,子类按钮的每个实例都应该有一个 NotificationObserver,并在 UserDefaults 更改时发布通知

var notification = Notification(name: Notification.Name(rawValue: "seasonChanged"))

从 nib 或你的初始化函数中唤醒

NotificationCenter.default.addObserver(self, selector: #selector(self.refreshButtonBorder), name: notification.name, object: nil)

每当季节寒冷变化洒通知尘

NotificationCenter.default.post(notification)

关于ios - 通过 UserDefault 设置更新子类 UIButton 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43744242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com