复选框保存/加载NSUserdefaults

问题描述 投票:0回答:3

我有这个带有两个复选框的应用程序,当我关闭时加载并在我打开时加载,但我无法弄明白。请有人帮我编辑代码。我知道需要以某种方式保存在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
        }
    }

}
ios iphone swift xcode checkbox
3个回答
1
投票

使用以下命令将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
        }
    }

}

然后不要忘记为应用中的每个复选框设置不同的标记。


0
投票

您可能正在寻找类似的东西吗?

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

0
投票
    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")

}
© www.soinside.com 2019 - 2024. All rights reserved.