小编SJM*_*JMC的帖子

iOS – 在 Swift 中处理 OTP(一次性代码)

有没有办法通过限制其他键盘输入来处理一次性代码敲击?

我需要 OTP 文本字段来预填充短信 OTP 代码。用户不应使用键盘数字按钮手动输入 OTP。

iOS 12 我们有一次性代码选项,它将自动填充在 QuickType 栏中,用户可以点击它来填充文本字段。我找不到限制其他键盘输入的选项。

有什么方法可以让我们只允许一次性代码点击并限制从数字键盘输入任何内容。

我尝试过创建 6 个文本字段。第一个文本字段内容类型设置为一次性代码。UserInteractionEnabled 仅适用于第一个文本字段,以便用户无法在其他字段中输入数据。一旦我获得 OTP 并点击 QuickType 栏 - 一次性代码,我就会预填写所有文本字段。

查看已加载>

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,因为当键盘打开时第一个文本字段处于活动状态,用户可以从键盘输入数字数据。 …

keyboard one-time-password uitextfield ios swift

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

ios ×1

keyboard ×1

one-time-password ×1

swift ×1

uitextfield ×1