复选框保存/加载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加载

NSUserDefaults 自动加载和保存数据

在 NSuserdefaults 中保存选定的检查表行

将 UIColor 保存到 NSUserDefaults 并从中加载

使用 NSUserDefaults 和 AVAudioPlayer 制作静音切换按钮

使用 NSUserDefaults 保存/加载数据 (cocos2d iphone)