UITextField 上的强密码覆盖
Posted
技术标签:
【中文标题】UITextField 上的强密码覆盖【英文标题】:Strong password overlay on UITextField 【发布时间】:2019-11-20 10:30:02 【问题描述】:我在UITextField
上遇到了奇怪的覆盖。我正在使用textContentType = .password
和isSecureTextEntry = true
类型的字段。我还有眼睛按钮可以通过更改 isSecureTextEntry = false
来取消隐藏密码字符。
当我这样做时,我的密码字符是可见的,但是当我输入至少一个新字符时,强密码会出现覆盖并且无法隐藏它。
那是什么以及如何防止它显示出来?
// 编辑:
我已经做了扩展来禁用自动填充,它的工作原理:
extension UITextField
func disableAutoFill()
if #available(ios 12, *)
textContentType = .oneTimeCode
else
textContentType = .init(rawValue: "")
【问题讨论】:
我想这是自动填充功能之一。我在此网页上找到了相同的视图:medium.com/developerinsider/… 我认为这是因为 iOS 的密码自动填充功能,请尝试下面的代码以摆脱它if #available(iOS 12, *) // iOS 12 & 13: Not the best solution, but it works. passwordTextField.textContentType = .oneTimeCode else // iOS 11: Disables the autofill accessory view. // For more information see the explanation below. emailTextField.textContentType = .init(rawValue: "") passwordTextField.textContentType = .init(rawValue: "")
用户可以取消自动填充,请你再测试一下,有办法让应用的用户取消自动填充并手动填充。
这不适用于我 iphone 6s ios 13.5
但这将停止自动填充工作。对我来说,我只想避免使用黄色的“强密码”覆盖。
【参考方案1】:
找到了解决这个问题的唯一方法。
textField.textContentType = .oneTimeCode
否则 iOS 12 对任何安全字段使用 PasswordAutofill (textField.isSecureTextEntry = true)。
这个解决方案来自苹果开发者论坛Yuri Petukhov'的回答。
【讨论】:
【参考方案2】:其他答案会导致向用户显示文本,这不是理想的 IMO。
解决这个问题:
将密码字段的内容类型设置为:.oneTimePad,将字段上的安全文本输入设置为:false,然后添加以下内容(或任何适合您的风格):
func textFieldDidBeginEditing(_ textField: UITextField)
if(textField == self.passwordTextField) self.passwordTextField.isSecureTextEntry = true
旁注 - 我尝试将那个 ^ 更改放在 viewWillAppear 中,但丑陋的黄色框仍然出现。
这是我发现最初保持文本安全/隐藏的唯一方法(如果需要,您可以使用显示/隐藏按钮切换它,Apple 的自动完成废话不会回来)
【讨论】:
【参考方案3】:Credit Christian Diaz 的答案:这似乎是在 14.0 及更高版本的 iOS 模拟器上使用安全文本字段的错误。我建议使用版本 13.7 的模拟器,即 14.0 之前的版本。如果您没有看到选择 13.7 设备的选项,请点击:
Xcode -> 首选项 -> 组件 -> iOS 13.7 模拟器
这将为 iPhone 12 之前的设备安装 iOS 13.7 模拟器。
只要确保您在模拟器的顶部栏上看到 13.7。
【讨论】:
以上是关于UITextField 上的强密码覆盖的主要内容,如果未能解决你的问题,请参考以下文章
ios8 UIAlertView becomeFirstResponder for Password UITextField 不起作用
UITextField PlaceHolder 颜色改变 Monotouch
如何在ios中组合使用密码点和普通文本的UITextField