UITextField 上的强密码覆盖

Posted

技术标签:

【中文标题】UITextField 上的强密码覆盖【英文标题】:Strong password overlay on UITextField 【发布时间】:2019-11-20 10:30:02 【问题描述】:

我在UITextField 上遇到了奇怪的覆盖。我正在使用textContentType = .passwordisSecureTextEntry = 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 上的强密码覆盖的主要内容,如果未能解决你的问题,请参考以下文章

UITextField如何删除强密码覆盖

ios8 UIAlertView becomeFirstResponder for Password UITextField 不起作用

UITextField PlaceHolder 颜色改变 Monotouch

如何在ios中组合使用密码点和普通文本的UITextField

firstRect(for:) 在 UITextField 中返回错误值

点击 UITextField 时如何阻止键盘显示?