Как сохранить информацию о текстовом поле электронной почты и пароля с помощью UserDefaults, если установлен флажок Swift iOS - PullRequest
0 голосов
/ 09 февраля 2019

Я использую библиотеку BEMCheckBox для флажка.Дело в том, что когда флажок установлен в true, он не сохраняет входные данные от пользователей

То, что я пытался сделать, это когда флажок == true, то должен сохранить электронную почту и пароль и установить флажок в true, затем сохранитьэто значение по умолчанию для пользователя.

если == false, следует удалить все (адрес электронной почты, пароль и сбросить флажок на 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 больше не вызывает данные.

Thnx.

1 Ответ

0 голосов
/ 09 февраля 2019
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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...