在UITextField上强制使用强密码

34

我遇到了一个奇怪的问题,我的 UITextField 上出现了一个覆盖层。我正在使用类型为textContentType = .passwordisSecureTextEntry = true的字段。我也有一个眼睛按钮来显示密码字符并将 isSecureTextEntry = false

当我这样做时,我的密码字符是可见的,但是当我输入至少一个新字符后,会出现强密码覆盖层,无法隐藏它。

那是什么,如何防止它出现?

strong password overlay

// 编辑:

我创建了一个扩展来禁用自动填充,并且它可以正常工作:

extension UITextField {
    func disableAutoFill() {
        if #available(iOS 12, *) {
            textContentType = .oneTimeCode
        } else {
            textContentType = .init(rawValue: "")
        }
    }
}

1
我想这是Autofill功能之一。我在以下网页上找到了相同的观点:https://medium.com/developerinsider/ios12-password-autofill-automatic-strong-password-and-security-code-autofill-6e7db8da1810 - MarcinR
1
我认为这是由于iOS的密码自动填充功能引起的,请尝试以下代码来摆脱它:if #available(iOS 12, *) { // iOS 12和13:不是最好的解决方案,但它可以工作。 passwordTextField.textContentType = .oneTimeCode } else { // iOS 11:禁用自动填充附件视图。 // 更多信息请参见下面的说明。 emailTextField.textContentType = .init(rawValue: "") passwordTextField.textContentType = .init(rawValue: "") } - Dixit Rathod
用户将能够取消自动填充,请您再次测试,应用程序的用户将有一种方法来取消自动填充并手动填写。 - user1046037
1
这对我不起作用,iPhone 6s iOS 13.5。 - Sandeep Maurya
但这样做会停止自动填充的工作。对我来说,我只想避免那个黄色的“强密码”叠加层。 - Waqas
3个回答

11
发现了这个问题的唯一解决方案。
textField.textContentType = .oneTimeCode

否则,iOS 12将对任何安全字段(textField.isSecureTextEntry = true)使用PasswordAutofill。
这个解决方案来自苹果开发者论坛Yuri Petukhov的答案。

2
这只是将该字段转换为一次性代码字段。就像向用户发送的6位代码文本一样。所以是的...这确实在视觉上修复了它。但就自动填充而言,它不再是一个密码字段了。 - joshuakcockrell

0
Credit Christian Diaz for the answer: 这似乎是使用iOS模拟器版本14.0及以上的安全文本字段存在的错误。我建议使用版本13.7的模拟器,即在14.0之前的那个版本。如果您没有看到选择13.7设备的选项,请单击以下内容:

Xcode -> 首选项 -> 组件 -> iOS 13.7模拟器

这将为iPhone 12之前的设备安装iOS 13.7模拟器。

只需确保您的模拟器顶部栏上显示13.7即可。


1
这个问题在iOS 16.2中仍未得到解决... - wander

0

其他答案会使文本被用户揭示,我认为这并不理想。

解决方法如下:

将密码字段的内容类型设置为:.oneTimePad,将字段上的安全文本输入设置为:false,然后添加以下内容(或适合您的任何风格):

func textFieldDidBeginEditing(_ textField: UITextField) { 
    if(textField == self.passwordTextField) { self.passwordTextField.isSecureTextEntry = true } }

副笔 - 我尝试将那个^更改放在viewWillAppear中,但丑陋的黄框仍然出现。

这是我发现的唯一方法来最初保护/隐藏文本(如果需要,您可以使用显示/隐藏按钮进行切换,而不会再出现Apple的自动完成糊涂)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接