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)
comment devons-nous y parvenir?
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)])
}
}
}
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
}