OTPを自動フェッチする場合(単一のテキストフィールドを使用する場合)、使用する必要があることを知っています。
otpTextField.textContentType = .oneTimeCode
ただし、複数のテキストフィールドを使用する場合(次の画像によると)
どうすればこれを達成できますか?
単一フィールドの自動OTPを取得できる場合は、そのテキストを4つのテキストフィールドに分割できます。私は信じている。
以下のように、textFieldの変更オブザーバーを使用する必要がある場合があります。
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)])
}
}
}
@Natarajanの答えに似ていますが、UITextFieldDelegate
メソッドを使用しています。 viewDidAppear
では、最初のテキストフィールドがファーストレスポンダーになり、タイプはoneTimeCode
になります。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Fill your textfields here
return true
}