How to auto fetch OTP, if we use multiple text fields

后端 未结 4 1370
花落未央
花落未央 2021-01-07 23:52

I know that if we want to auto fetch the OTP(if we use single textfield) we need to use

otpTextField.textContentType = .oneTimeCode

But, If

4条回答
  •  渐次进展
    2021-01-08 00:20

    -> From iOS 12 Apple will allow the support to read One Time Code which you will get in the iPhone device. you can split text into four fields and autofilled and manually enter otp and remove one by one and move each textfield.

    1) self.textone maxmimum length 4 and other textfield max length 1

    2) Add UITextFieldDelegate

    if #available(iOS 12.0, *) {
       txtOne.textContentType = .oneTimeCode
    }
    self.txtOne.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
    self.txtOne.becomeFirstResponder()
    
      @objc func textFieldDidChange(_ textField: UITextField) {
        if #available(iOS 12.0, *) {
            if textField.textContentType == UITextContentType.oneTimeCode{
                //here split the text to your four text fields
                if let otpCode = textField.text, otpCode.count > 3{
                    txtOne.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 0)])
                    txtTwo.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 1)])
                    txtThree.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 2)])
                    txtFour.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 3)])
                }
            }
         } 
      }
    
     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
           if (string.count == 1){
               if textField == txtOne {
                   txtTwo?.becomeFirstResponder()
               }
               if textField == txtTwo {
                   txtThree?.becomeFirstResponder()
               }
               if textField == txtThree {
                   txtFour?.becomeFirstResponder()
               }
               if textField == txtFour {
                   txtFour?.resignFirstResponder()
                   textField.text? = string
                    //APICall Verify OTP
                   //Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.VerifyOTPAPI), userInfo: nil, repeats: false)
               }
               textField.text? = string
               return false
           }else{
               if textField == txtOne {
                   txtOne?.becomeFirstResponder()
               }
               if textField == txtTwo {
                   txtOne?.becomeFirstResponder()
               }
               if textField == txtThree {
                   txtTwo?.becomeFirstResponder()
               }
               if textField == txtFour {
                   txtThree?.becomeFirstResponder()
               }
               textField.text? = string
               return false
           }
    
       }
    

提交回复
热议问题