如何使用用户默认值保留电子邮件和密码文本字段信息(如果选中复选框) Swift iOS



我正在使用BEMCheckBox库作为复选框。问题是当复选框为真时,它不会保存用户的输入

我试图做的是当复选框 == true它应该,保存电子邮件和密码,并将复选框设置为 true,然后将其保存为用户默认值。

如果 == 假应该删除所有内容(电子邮件,密码和重置复选框为false(。,但它不起作用。

 var Defaults = UserDefaults.standard
@IBOutlet weak var box1: BEMCheckBox!
 struct keys {
    static let emailKey = "emailTextField"
    static let passwordKey = "passwordTextField"
    static var boxBool = "boxBool"
}
    override func viewDidLoad() {
    didTap(box1)
    box1.delegate = self
    checkSavedData()
}

func didTap(_ checkBox: BEMCheckBox) {

    if checkBox.on == true {
        rememberMyEmailandPassword()
    } else if checkBox.on == false {
        Defaults.removeObject(forKey: keys.emailKey)
        Defaults.removeObject(forKey: keys.passwordKey)
        Defaults.removeObject(forKey: keys.boxBool)
    }
}
 func rememberMyEmailandPassword() {
    Defaults.set(emailTextField.text, forKey: keys.emailKey)
    Defaults.set(passwordTextField.text, forKey: keys.passwordKey)
    Defaults.set(box1.on, forKey: keys.boxBool)

}
func checkSavedData() {
    let email = Defaults.value(forKey: keys.emailKey) as? String ?? ""
    let password = Defaults.value(forKey: keys.passwordKey) as? String ?? ""
    let boxBoolean = Defaults.bool(forKey: keys.boxBool)
    emailTextField.text = email
    passwordTextField.text = password
    box1.on = boxBoolean
}

我认为盒子布尔的问题。 因为我相信盒子布尔不会再回忆起数据了。

闷不乐。

var defaults = UserDefaults.standard
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var box1: BEMCheckBox!
enum Keys: String {
    case email, password, box1
}
override func viewDidLoad() {
    // 1) loads the checkBox state when the view loads
    box1.on = defaults.bool(forKey: Keys.box1.rawValue)
    box1.delegate = self
    // 2) update the UI in case it is checked
    if box1.on { 
       loadData() 
    }
    // 3) adds a control event for editing changed to both fields
    emailTextField.addTarget(self, action: #selector(saveData), for: .editingChanged)
    passwordTextField.addTarget(self, action: #selector(saveData), for: .editingChanged)
}
func didTap(_ checkBox: BEMCheckBox) {
    // 4) saves the checkbox state
    defaults.set(box1.on, forKey: Keys.box1.rawValue)
    // 5) Saves field data or remove it
    if box1.on  {
        defaults.set(emailTextField.text!, forKey: Keys.email.rawValue)
        defaults.set(passwordTextField.text!, forKey: Keys.password.rawValue)
    } else {
        // 6) You should NEVER remove the checkbox value
        defaults.removeObject(forKey: Keys.email.rawValue)
        defaults.removeObject(forKey: Keys.password.rawValue)
    }
}
@objc func saveData(_ textField: UITextField) {
    // 7) update the data as the user types it in case it is checked
    if box1.on  {
        defaults.set(emailTextField.text!, forKey: Keys.email.rawValue)
        defaults.set(passwordTextField.text!, forKey: Keys.password.rawValue)
    }
}
func loadData() {
    // 8) updates the UI with the persisted data
    // Note that text property is optional so you can pass an optional string (no need to unwrap it)
    emailTextField.text = defaults.string(forKey: Keys.email.rawValue)
    passwordTextField.text = defaults.string(forKey: Keys.password.rawValue)
}

最新更新