Как автоматически получать OTP, если мы используем несколько текстовых полей - PullRequest
0 голосов
/ 21 ноября 2018

Я знаю, что если мы хотим автоматически получить OTP (если мы используем одно текстовое поле), нам нужно использовать

otpTextField.textContentType = .oneTimeCode

Но, если мы используем несколько текстовых полей (согласно следующему изображению)

some thing like this

как нам этого добиться?

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

ОБНОВЛЕНИЕ iOS 12

Apple разрешит службе поддержки считывать одноразовый код (OTP - одноразовый пароль), который вы получите на устройстве iPhone.

iOS поддерживает автозаполнение пароля в UITextField, UITextView и любое пользовательское представление, которое принимает протокол UITextInput.Системная клавиатура установила для textContentType значение .oneTimeCode

1) Используя код

singleFactorCodeTextField.textContentType = .oneTimeCode

2) Используя раскадровку / XIB

Выберите UITextField / UITextView в раскадровке / XIB. Нажмите «Инспектор атрибутов».Перейдите к признаку ввода текста, нажмите «Тип содержимого», выберите один временной код и все готово.

Операционная система автоматически обнаружит коды подтверждения из сообщений с этим набором UITextContentType.

Также можно разделить длячто отп, что вы ожидаете.

Ознакомьтесь с официальной документацией для https://developer.apple.com/documentation/security/password_autofill/enabling_password_autofill_on_a_text_input_view

0 голосов
/ 31 июля 2019

То, что я делаю, похоже на ответ @ Natarajan, но я использую UITextFieldDelegate метод.На viewDidAppear ваше первое текстовое поле должно стать первым респондентом и иметь тип oneTimeCode.

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

    return true
}
0 голосов
/ 21 ноября 2018

Если вы можете получить автоматический OTP для одного поля, вы можете разделить этот текст на четыре текстовых поля.Я верю.

Возможно, вам придется использовать наблюдатель изменений 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)])
        }
    }

}
...