iOS开发:如何同时启用密码自动填充、安全输入与九宫格数字键盘?
数字密码输入框同时开启安全输入与自动填充的问题
需求与问题现象
想要实现一个密码输入框(UITextField),满足以下两个要求:
- 使用系统九宫格数字键盘(
keyboardType = .numberPad) - 支持密码自动填充
当前实现代码:
let passwordTextField: UITextField = { let textField = UITextField() textField.placeholder = "password" textField.textContentType = .password textField.isSecureTextEntry = true textField.keyboardType = .numberPad return textField }()
遇到的问题:
- 当设置
isSecureTextEntry = true时,密码自动填充按钮消失;设置为false时,自动填充按钮正常显示 - 若将
keyboardType改为.default等其他类型,同时保留isSecureTextEntry = true,自动填充按钮可以正常显示
解答
这是Apple的设计特性吗?
是的,这属于苹果的设计逻辑。苹果认为同时开启isSecureTextEntry和.numberPad的纯数字安全输入框,密码自动填充的使用场景相对有限,因此默认隐藏了自动填充按钮。
如何同时实现三者?
可以通过以下简便方案实现:
将键盘类型改为.asciiCapableNumberPad,该类型的键盘视觉上和.numberPad几乎一致(同样是九宫格数字键盘),但属于ASCII兼容的键盘类型,苹果会为其保留安全输入模式下的自动填充功能。
修改后的代码:
let passwordTextField: UITextField = { let textField = UITextField() textField.placeholder = "password" textField.textContentType = .password textField.isSecureTextEntry = true textField.keyboardType = .asciiCapableNumberPad // 替换为该键盘类型 return textField }()
如果需要完全自定义自动填充触发方式,也可以通过自定义输入 accessory view,手动添加自动填充按钮并调用系统密码自动填充API,但这种方式需要自行处理交互逻辑,复杂度较高,推荐优先使用上述简便方案。
内容的提问来源于stack exchange,提问作者Shilai Zhang
相关产品推荐
相关产品推荐

