复选框保存/加载NSUserdefaults
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复选框保存/加载NSUserdefaults相关的知识,希望对你有一定的参考价值。
我有这个带有两个复选框的应用程序,当我关闭时加载并在我打开时加载,但我无法弄明白。请有人帮我编辑代码。我知道需要以某种方式保存在UserDefaults
但我不知道如何编码。
class CheckBox: UIButton {
// Images
let checkedImage = UIImage(named: "checked")! as UIImage
let uncheckedImage = UIImage(named: "unchecked")! as UIImage
// Bool property
var isChecked: Bool = false {
didSet{
if isChecked == true {
self.setImage(checkedImage, for: UIControlState.normal)
} else {
self.setImage(uncheckedImage, for: UIControlState.normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControlEvents.touchUpInside)
self.isChecked = false
}
@objc func buttonClicked(sender: UIButton) {
if sender == self {
isChecked = !isChecked
}
}
}
答案
使用以下命令将bool值保存到UserDefaults:
UserDefaults.standard.set(isChecked, forKey: "com.myCompany.checkboxState")
并使用以下方式加载:
self.isChecked = UserDefaults.standard.bool(forKey: "com.myCompany.checkboxState")
在UserDefaults的文档中阅读更多内容。
请记住,如果您有多个复选框,则必须为每个复选框使用唯一键,例如使用UIButton
的标签来区分它们:
class CheckBox: UIButton {
// Images
let checkedImage = UIImage(named: "checked")! as UIImage
let uncheckedImage = UIImage(named: "unchecked")! as UIImage
// Bool property
var isChecked: Bool = false {
didSet{
if isChecked == true {
self.setImage(checkedImage, for: UIControlState.normal)
} else {
self.setImage(uncheckedImage, for: UIControlState.normal)
}
// save it like this
UserDefaults.standard.set(isChecked, forKey: "com.myCompany.checkboxStateFor(self.tag)")
}
}
override func awakeFromNib() {
self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControlEvents.touchUpInside)
// load it like this
self.isChecked = UserDefaults.standard.bool(forKey: "com.myCompany.checkboxStateFor(self.tag)")
}
@objc func buttonClicked(sender: UIButton) {
if sender == self {
isChecked = !isChecked
}
}
}
然后不要忘记为应用中的每个复选框设置不同的标记。
另一答案
您可能正在寻找类似的东西吗?
extension UserDefaults{
func setChecked(value: Bool, forId id: String){
set(value, forKey: id)
}
func getChecked(forId id: String) -> Int{
return bool(forKey: id)
}
}
使用:
UserDefaults.standard.setChecked(true, "box1")
UserDefaults.standard.getChecked("box1")
另一答案
override func awakeFromNib() {
self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControlEvents.touchUpInside)
isChecked = UserDefaults.standard.bool(forKey: "buttonChecked")
}
@objc func buttonClicked(sender: UIButton) {
isChecked = !isChecked
UserDefaults.standard.set(isChecked, forKey: "buttonChecked")
}
以上是关于复选框保存/加载NSUserdefaults的主要内容,如果未能解决你的问题,请参考以下文章
将UIColor保存到NSUserDefaults并从NSUserDefaults加载
将 UIColor 保存到 NSUserDefaults 并从中加载