You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用textContentType.oneTimeCode实现短信OTP自动填充UITextField?

问题描述
  • 已为UITextField设置代理、textContentType = .oneTimeCode,且启用自动填充密码设置
  • 短信格式为:Your xxxx OTP Code is :7777(包含“code”字样)
  • 尝试过新建项目、通过Storyboard设置内容类型,均无效
  • 目标:实现短信验证码自动填充到文本框,但代理方法未触发,自动填充功能失效
解决方案

1. 补全代理设置

当前代码未显式绑定代理,导致代理方法无法触发。在viewDidLoad中添加代理绑定,并确保ViewController遵循UITextFieldDelegate协议:

class YourViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var tf: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        tf.delegate = self // 新增代理绑定
        tf.textContentType = .oneTimeCode
        tf.keyboardType = .numberPad
        tf.becomeFirstResponder()
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("textFieldDidBeginEditing --- ",textField.text)
    }
}

2. 调整短信格式适配Apple规则

Apple的OTP自动填充需要短信关联你的App域名,建议修改短信格式为以下任一:

  • Your xxxx OTP Code is: 7777 @yourappdomain.com
  • Your xxxx OTP Code is: 7777 #yourappdomain.com
    (yourappdomain.com替换为你的App在开发者后台配置的关联域名)

3. 完善textFieldDidChange的绑定

当前textFieldDidChange方法未绑定文本框的编辑事件,需在viewDidLoad中添加:

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

4. 检查设备与App设置

  • 用真实设备测试(模拟器无法接收短信和触发自动填充)
  • 确保设备「设置>密码>自动填充密码」已开启,并勾选你的App
  • 确认文本框的secureTextEntry属性为false(该属性会干扰.oneTimeCode的自动填充)

内容的提问来源于stack exchange,提问作者Akshay Ashok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:31:06