如果选中复选框,如何使用 UserDefaults 保留电子邮件和密码文本字段信息 Swift iOS
How to persist email and password textfield info using UserDefaults if checkbox is selected Swift iOS
我正在为复选框使用 BEMCheckBox 库。
问题是当复选框为真时,它不会保存用户的输入
我尝试做的是当 checkbox == 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
}
我认为是 boxBoolean 的问题。因为我相信 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)
}
我正在为复选框使用 BEMCheckBox 库。 问题是当复选框为真时,它不会保存用户的输入
我尝试做的是当 checkbox == 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
}
我认为是 boxBoolean 的问题。因为我相信 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)
}