Swift 如何使用复选框保护用户登录会话 "Remember Me"
Swift how to safe user login session with checkbox "Remember Me"
我有一个关于我开发的应用程序的问题,在我的登录屏幕上我有这个复选框,当用户选中该复选框时,他的用户名(或者在我的情况下他的 phone 登录号码)将自动在文本字段中安全,如果用户注销,他的 phone 号码将自动填充到文本字段中。
如果用户不选中该框,他的 phone 号码将不会在用户会话中安全,因此当用户注销时,他的 phone 号码将不会填写登录文本字段。
该复选框用于“记住我”,当用户选中该框时,它将记住用户 phone 号码,如果不选中该框,则不会记住下一个用户 phone用户登录时间。
知道伙计们怎么样了吗?
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
checkBoxBtn.addTarget(self, action: #selector(toggleCheckBox(_:)), for: .valueChanged)
checkBoxBtn.isSelected = rememberMeFlag
if rememberMeFlag {
let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
textPhoneNumber.text = save_session!.substring(from: 1)
}
textPhoneNumber.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}
@IBAction func toggleCheckBox(_ sender: UIButton) {
if sender.isSelected == true {
checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
sender.isSelected = false
}else{
checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
sender.isSelected = true
}
}
//this code is for user session
if FIRST_BOOT {
print("first boot")
if let save_session = UserDefaults.standard.string(forKey: "USER_FULLNAME") {
USER_FULLNAME = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "SESSION_TOKEN") {
SESSION_TOKEN = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "USER_PIN") {
USER_PIN = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE") {
USER_TELEPHONE = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "IDENTITY_NUMBER") {
IDENTITY_NUMBER = save_session
}
if let _ = UserDefaults.standard.string(forKey: "WIZARD") {
// Wizard has opened
} else {
//performSegue(withIdentifier: "loginToWizard", sender: nil)
//return
}
//i use that code to put the user phone num into the textfield
if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE_CACHED") {
textPhoneNumber.text = save_session.substring(from: 1)
}
谁能告诉我如何做我想做的事?我只想将该用户会话放在复选框功能中,但在那之后我只看到了很多错误,我询问如何执行此操作的步骤,导致我有点困惑,即使它看起来并不那么困难......谢谢伙计们。
我建议如下:
- 当用户选中或取消选中“记住我”时,更新实例变量
rememberMeFlag
并将此信息存储在用户默认值中
- 当用户编辑电话文本字段且
rememberMeFlag
为true
时,将内容保存到用户默认值
- 加载视图时,从用户默认值中读取值并更新
rememberMeFlag
、复选框和文本字段
因此代码可能如下所示:
class X: UIViewController {
private var rememberMeFlag = false
@IBOutlet weak var rememberMeSwitch:UISwitch!
@IBOutlet weak var telephoneTextField:UITextField!
override func viewDidLoad() {
super.viewDidLoad()
rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
rememberMeSwitch.isOn = rememberMeFlag
if rememberMeFlag {
let tel = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
telephoneTextField.text = tel
}
// connect actions; do this in code like here
// or use outlet connections from the storyboard
telephoneTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
rememberMeSwitch.addTarget(self, action: #selector(valueChanged(_:)), for: .valueChanged)
}
@IBAction func toggleCheckBox(_ sender: UIButton) {
rememberMeFlag = !rememberMeFlag
UserDefaults.standard.set(rememberMeFlag, forKey: "REMEMBER_USER")
if rememberMeFlag == true {
checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
let text = telephoneTextField.text
UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
} else {
checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
UserDefaults.standard.removeObject(forKey: "USER_TELEPHONE")
}
}
@objc func textFieldDidChange(_ sender: UITextField){
guard rememberMeFlag else { return }
let text = telephoneTextField.text
UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
}
}
我有一个关于我开发的应用程序的问题,在我的登录屏幕上我有这个复选框,当用户选中该复选框时,他的用户名(或者在我的情况下他的 phone 登录号码)将自动在文本字段中安全,如果用户注销,他的 phone 号码将自动填充到文本字段中。
如果用户不选中该框,他的 phone 号码将不会在用户会话中安全,因此当用户注销时,他的 phone 号码将不会填写登录文本字段。
该复选框用于“记住我”,当用户选中该框时,它将记住用户 phone 号码,如果不选中该框,则不会记住下一个用户 phone用户登录时间。
知道伙计们怎么样了吗?
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
checkBoxBtn.addTarget(self, action: #selector(toggleCheckBox(_:)), for: .valueChanged)
checkBoxBtn.isSelected = rememberMeFlag
if rememberMeFlag {
let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
textPhoneNumber.text = save_session!.substring(from: 1)
}
textPhoneNumber.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}
@IBAction func toggleCheckBox(_ sender: UIButton) {
if sender.isSelected == true {
checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
sender.isSelected = false
}else{
checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
sender.isSelected = true
}
}
//this code is for user session
if FIRST_BOOT {
print("first boot")
if let save_session = UserDefaults.standard.string(forKey: "USER_FULLNAME") {
USER_FULLNAME = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "SESSION_TOKEN") {
SESSION_TOKEN = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "USER_PIN") {
USER_PIN = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE") {
USER_TELEPHONE = save_session
}
if let save_session = UserDefaults.standard.string(forKey: "IDENTITY_NUMBER") {
IDENTITY_NUMBER = save_session
}
if let _ = UserDefaults.standard.string(forKey: "WIZARD") {
// Wizard has opened
} else {
//performSegue(withIdentifier: "loginToWizard", sender: nil)
//return
}
//i use that code to put the user phone num into the textfield
if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE_CACHED") {
textPhoneNumber.text = save_session.substring(from: 1)
}
谁能告诉我如何做我想做的事?我只想将该用户会话放在复选框功能中,但在那之后我只看到了很多错误,我询问如何执行此操作的步骤,导致我有点困惑,即使它看起来并不那么困难......谢谢伙计们。
我建议如下:
- 当用户选中或取消选中“记住我”时,更新实例变量
rememberMeFlag
并将此信息存储在用户默认值中 - 当用户编辑电话文本字段且
rememberMeFlag
为true
时,将内容保存到用户默认值 - 加载视图时,从用户默认值中读取值并更新
rememberMeFlag
、复选框和文本字段
因此代码可能如下所示:
class X: UIViewController {
private var rememberMeFlag = false
@IBOutlet weak var rememberMeSwitch:UISwitch!
@IBOutlet weak var telephoneTextField:UITextField!
override func viewDidLoad() {
super.viewDidLoad()
rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
rememberMeSwitch.isOn = rememberMeFlag
if rememberMeFlag {
let tel = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
telephoneTextField.text = tel
}
// connect actions; do this in code like here
// or use outlet connections from the storyboard
telephoneTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
rememberMeSwitch.addTarget(self, action: #selector(valueChanged(_:)), for: .valueChanged)
}
@IBAction func toggleCheckBox(_ sender: UIButton) {
rememberMeFlag = !rememberMeFlag
UserDefaults.standard.set(rememberMeFlag, forKey: "REMEMBER_USER")
if rememberMeFlag == true {
checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
let text = telephoneTextField.text
UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
} else {
checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
UserDefaults.standard.removeObject(forKey: "USER_TELEPHONE")
}
}
@objc func textFieldDidChange(_ sender: UITextField){
guard rememberMeFlag else { return }
let text = telephoneTextField.text
UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
}
}