【问题标题】:Is it possible to have OTP autofill but manually entering is not allowed?是否可以进行 OTP 自动填充但不允许手动输入?
【发布时间】:2020-03-02 05:43:53
【问题描述】:

我遇到了一个奇怪的问题。我知道使用

进行 OTP 自动填充

textField.textContentType = .oneTimeCode

但我有一个不同的问题,我希望这个自动填充工作,但应该禁用文本字段以进行任何手动输入。

基本上,用户在他/她的手机上收到带有 OTP 的消息,并且 OTP 通过使用 .oneTimeCode 自动填充。但无论如何,如果应用程序无法通过此方法(从短信)读取或找到 OTP,则不应允许用户手动输入 OTP。

有没有办法实现这种情况?

【问题讨论】:

  • 您需要像这样禁用文本字段的用户交互:-textField.isUserInteractionEnabled = false
  • 但是如果我禁用 isUserInteractionEnabled ,OTP 将如何自动填充? OTP 没有出现在键盘上吗?

标签: ios swift


【解决方案1】:

您可以在 textField 上设置透明视图并禁用其 userInteraction。 & 为了自动显示键盘,您可以使用 textField.becomeFirstResponder()

您需要禁用 TextField 上的 view 的 userInteraction:

transparentView.isUserInteractionEnabled = false

自动显示键盘:

当你的 otpScreen 出现时,你可以在 viewWillAppear 方法中写下这一行。

textField.becomeFirstResponder()

【讨论】:

  • 但是如果我禁用 isUserInteractionEnabled ,OTP 将如何自动填充? OTP没有出现在键盘上吗?键盘需要出现 OTP 出现在键盘上。
  • 是的,您是对的,然后您可以在 textField 上设置透明视图并禁用其 userInteraction。 & 要自动显示键盘,您可以使用 textField.becomeFirstResponder()。我希望这会成功。
  • 是的,这会起作用,但是,我会在哪里使用 textField.becomeFirstResponder() ,我不能随便调用它?!有没有办法找到收到 OTP 的时间?
  • 我认为我们无法检测到何时收到 OTP,但您可以在 otpScreen 出现时使用textField.becomeFirstResponder()
  • 我会检查这是否可行。
【解决方案2】:

乍一看,我的建议是添加清晰视图以阻止文本字段触摸,但这会阻止填充 OTP

禁用用户交互也会阻止填写 OTP。

也许您可以在文本更改时使用文本字段委托,检查新字符。当字符小于您的 OTP 长度时,请忽略新字符。

textField:shouldChangeCharactersInRange:replacementString:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2010-11-08
    • 2018-08-10
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多