2017-05-24 1 views
0

私が使用しようとしている拡張機能のあるヘルプを探しています。例えばstatusLabel.textでエラーを出すログインページです。たとえば、間違ったパスワードを入力するとstatusLabel.textこれは私がBAを元に戻すためにステータスラベルをしたいと思い、私のログオンセクションIOS textFieldDidBeginEditing

@IBAction func login(_ sender: Any) { 

    self.userName.resignFirstResponder() 
    self.password.resignFirstResponder() 
    self.repeatPassword.resignFirstResponder() 
    self.passwordsStack.resignFirstResponder() 


    self.progress.startAnimating() 
    switch self.currentLoginType { 

    case .login: 

     let email = self.userName.text 
     let password = self.password.text 

     FirebaseManager.login(email: email!, password: password!, completion: { (status: Bool, error: Error?) in 

      if status && error == nil { 
       if FirebaseManager.isEmailVerified { 

        self.dismiss(animated: true, completion: nil) 
        print (error?.localizedDescription ?? "") 

        let storyboard = UIStoryboard(name: "Main", bundle: nil) 
        let LoginVC = storyboard.instantiateViewController(withIdentifier: "ReavealVC") as! SWRevealViewController 
        let appDelegate = UIApplication.shared.delegate as! AppDelegate 
        appDelegate.window?.rootViewController = LoginVC 

       } else { 

        DispatchQueue.main.async { 
         self.statusLabel.text = "Your email is not verified. Please check your email" 
         self.progress.stopAnimating() 
         print ("have we stopped at email not verified") 
         self.clearLoginTextFields() 
        } 
       } 
      } else { 

       DispatchQueue.main.async { 
        self.progress.stopAnimating() 
        self.statusLabel.text = FirebaseManager.StringFromError(error: error) 
        print("have we stopped at email after its not verified") 
        self.clearLoginTextFields() 
       } 

      } 

     }) 


    case .signup: 

     if self.password.text == self.repeatPassword.text{ 

      let email = self.userName.text 
      let password = self.password.text 

      FirebaseManager.LinkWithEmailAndPassword(email: email!, password: password!, completion: { (status: Bool, error: Error?) in 

       if status && error == nil { 

        self.dismiss(animated: true, completion: nil) 

        self.progress.stopAnimating() 
        self.statusLabel.text = "Email verification sent, please check you inbox" 
        print(error?.localizedDescription ?? "") 

       } else { 

        DispatchQueue.main.async { 
         self.progress.stopAnimating() 
         self.statusLabel.text = FirebaseManager.StringFromError(error: error) 

        } 
       } 
      }) 
      self.view.endEditing(true) 
      clearLoginTextFields() 

     }else{ 
      self.progress.stopAnimating() 
      self.statusLabel.text = "Passwords do not match, please try again!" 
     } 

    case .forgotPassword: 

     FirebaseManager.sendPasswordReset(email: self.userName.text!, completion: { (status:Bool) in 

      DispatchQueue.main.async { 
       self.progress.stopAnimating() 
       self.statusLabel.text = status ? "Reset password sent" : "Error sending reset password" 
      } 
     }) 

     break 
    } 

} 

そして、私の拡張

extension LoginViewController: UITextFieldDelegate { 

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

     return true 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

     textField.resignFirstResponder() 

     return true 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 

     textField.resignFirstResponder() 

    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 

     statusLabel.text = "" 
    } 
} 

ある

を「間違ったメールは、再度お試しください」と表示されますユーザーが自分の資格情報を再度入力し始めても、私のtextFieldDidBeginEditingが呼び出されていないように見えます。

答えて

0

あなたのUITextFieldの代理人を設定する必要があります。

userName.delegate = self 
password.delegate = self 

ここで、両方のテキストフィールドがLoginViewControllerにあると仮定します。このアプローチに加えて

デリゲートのものなしで行くと何ができる:

userName.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged) 

func textChanged(textField: UITextField) { 

} 

そして、あなたはおそらく、メッセージかどうかを確認する必要があります:「メール間違って再試行してください」を""を設定する前に表示されます。

関連する問題