我的iOS应用有用户名&密码文本字段。用户名具有特定限制,由textField:shouldChangeCharactersInRange:replacementString:
确保为无效的结果字符串返回NO
。
在iOS 11中,我发现在使用'Password AutoFill'
功能时出现问题。在这种情况下,会调用委托方法,但无论返回值如何,都会忽略其结果并替换文本。
是设计还是错误,还是我错过了什么?
答案 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)
}
}
}