0

私が開発したアプリについて質問があります。ログイン画面にこのチェックボックスがあり、ユーザーがそのボックスをチェックすると、ユーザー名 (または私の場合はログインする電話番号) がテキストフィールドで自動的に安全になり、ユーザーがログアウトした場合、彼の電話番号がテキストフィールドに自動的に入力されます。

ユーザーがそのボックスをチェックしないと、ユーザーセッションで電話番号が安全にならないため、ユーザーがログアウトすると、電話番号がログインテキストフィールドに入力されません。

そのチェックボックスは「私を記憶する」ためのものです。ユーザーがそのボックスをチェックすると、ユーザーの電話番号が記憶され、ボックスをチェックしないと、ユーザーが次回ログインするときにユーザーの電話番号が記憶されません。

どうやってみんな?

画像

ここに私のコードがあります:

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)
    }
  
  

誰かが私がやりたいことをする方法を教えてもらえますか? そのユーザーセッションをチェックボックス関数内に配置したいだけですが、その後、多くのバグが表示されます。それを行う方法の手順について質問しています。それほど難しくないように見えますが、どうすればよいのかちょっと混乱しています....ありがとう彼ら。

4

1 に答える 1

0

次のことをお勧めします。

  • ユーザーが「remember me」をオンまたはオフにすると、インスタンス変数が更新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")
    }
}
于 2020-07-22T06:06:14.130 に答える