web-dev-qa-db-fra.com

Comment récupérer automatiquement OTP, si nous utilisons plusieurs champs de texte

Je sais que si nous voulons récupérer automatiquement l'OTP (si nous utilisons un seul champ de texte), nous devons utiliser

otpTextField.textContentType = .oneTimeCode

Mais, si nous utilisons plusieurs champs de texte (selon l'image suivante)

some thing like this

comment devons-nous y parvenir?

12
Bhanuteja

Si vous pouvez obtenir l'OTP automatique pour un seul champ, vous pouvez diviser ce texte en vos quatre champs de texte. Je crois.

Vous devrez peut-être utiliser l'observateur de changement de textField comme ci-dessous,

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
func textFieldDidChange(_ textField: UITextField) {

        // here check you text field's input Type
        if textField.textContentType == UITextContentType.oneTimeCode{

            //here split the text to your four text fields

            if let otpCode = textField.text, otpCode.count > 3{

                textField.text = String(otpCode[otpCode.startIndex])
                textField1.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 1)])
                textField2.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 2)])
                textField3.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 3)])
        }
    }

}
1
Natarajan

Ce que je fais est similaire à la réponse de @ Natarajan, mais j'utilise la méthode UITextFieldDelegate. Sur viewDidAppear, votre premier champ de texte doit devenir premier répondeur et être de type oneTimeCode.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {        
    // Fill your textfields here

    return true
}
0
jonaszmclaren