iOS 11中的密码自动填充忽略从textField返回的NO:shouldChangeCharactersInRange:replacementString:

时间:2017-10-11 21:15:54

标签: ios uitextfield ios11 uitextfielddelegate

我的iOS应用有用户名&密码文本字段。用户名具有特定限制,由textField:shouldChangeCharactersInRange:replacementString:确保为无效的结果字符串返回NO

在iOS 11中,我发现在使用'Password AutoFill'功能时出现问题。在这种情况下,会调用委托方法,但无论返回值如何,都会忽略其结果并替换文本。

是设计还是错误,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

是的,它是设计的,当您设置文本字段的text属性时,下面的委托方法不会被调用,这就是它可能发生的事情

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

以下这种方法无论如何都没有帮助

 func textFieldDidEndEditing(_ textField: UITextField) -> Bool {

            return true
        }

但是您可以继承UITextfield,覆盖text属性使用默认方法'textChanged'为UITextFieldDelegate创建扩展,并在委托中实现'textChanged'方法

extension UITextFieldDelegate{

    func textChanged(_ textField:UITextField){
        print("textChanged")
    }

}
class CustomTF: UITextField {

        override var text: String?{
            didSet{
                print("didSet text")
                delegate?.textChanged(self)
            }
        }

    }