IOS - обрабатывать OnetimeCode в Swift - PullRequest
0 голосов
/ 21 июня 2019

Есть ли способ обработать одноразовое нажатие кода, ограничивая другие записи клавиатуры?

У меня есть требование к текстовому полю OTP, чтобы предварительно заполнить код OTP смс. Пользователь не должен вводить OTP вручную с помощью цифровых кнопок клавиатуры.

IOS 12 у нас есть опция одноразового кода, она будет автоматически заполнена в панели быстрого набора, и пользователь может нажать на нее, чтобы заполнить текстовое поле. Я не могу найти возможность ограничить другие записи клавиатуры.

Есть ли способ, которым мы можем разрешить только одноразовое нажатие кода и ограничение любой записи с цифровой клавиатуры.

Я попытался создать 6 текстовых полей. Первый тип содержимого текстового поля установлен как One Time code. UserInteractionEnabled только для первого текстового поля, чтобы пользователь не мог вводить данные в другие поля. Как только я получаю OTP и нажимает на панель QuickType - одноразовый код, я заполняю все текстовые поля.

viewdidload>

otp1TB.addTarget(self, action:#selector(textFieldDidChange(_:)), for: .editingChanged)


@objc func textFieldDidChange(_ textField: UITextField) {
    if let otpCode = textField.text ,  otpCode.count > 5 {
        otp1TB.text = String(otpCode[otpCode.startIndex])
        otp2TB.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 1)])
        otp3TB.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 2)])
        otp4TB.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 3)])
        otp5TB.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 4)])
        otp6TB.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 5)])
        otp1TB.isUserInteractionEnabled = false 
        self.view.endEditing(true)
    }
}

Проблема здесь в том, что первое текстовое поле активно, когда клавиатура открывается, у пользователя есть возможность ввода числовых данных с клавиатуры.

Мне нужно разрешить только одноразовое нажатие кода при открытии клавиатуры.

1 Ответ

0 голосов
/ 21 июня 2019

Я думаю, что вы можете пропустить всю эту сложность и просто использовать стандартный тип ввода iOS 12 OTP:

otpTextField.textContentType = .oneTimeCode

См .: Автоматическая проверка OTP в iOS?

И видео WWDC 2018, которое покрывает это: https://developer.apple.com/videos/play/wwdc2018/204

...