我正在使用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)
}