swift 中的 UITextField shouldChangeCharacters 不适用于输入的第一个字母
UITextField shouldChangeCharacters in swift is not working for the first letter entered
我有一个文本字段数量 phone。当我输入 phone 号码时,我正在检查无效 phone 号码的验证。我正在使用委托方法“文本字段应更改字符”。它工作正常,但不适用于用户输入的第一个字母。
extension phoneCell: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
validateInput(of: textField)
return true
}
谁能帮我解决这个问题?
如果您注意到 shouldChangeCharactersIn
有一个 return 类型 Bool
。
这意味着,当用户按下键盘上的某个键时,您甚至在在文本字段中注册该字符之前都会收到此委托的回调。
现在,如果您 return true,则按下的字符将反映在文本字段中,如果您 return false,则输入将被丢弃。
所以第一次你的 string.count
将是 1 但你的 textfeild.text.count
将是 0。
查看您的验证码,我建议您在文本字段中添加一个 IBAction
以进行编辑更改。
你的验证函数是做什么的?为什么默认情况下 returning true
?
shouldChangeCharactersIn
应该 return 您的验证函数的结果。
我有一个文本字段数量 phone。当我输入 phone 号码时,我正在检查无效 phone 号码的验证。我正在使用委托方法“文本字段应更改字符”。它工作正常,但不适用于用户输入的第一个字母。
extension phoneCell: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
validateInput(of: textField)
return true
}
谁能帮我解决这个问题?
如果您注意到 shouldChangeCharactersIn
有一个 return 类型 Bool
。
这意味着,当用户按下键盘上的某个键时,您甚至在在文本字段中注册该字符之前都会收到此委托的回调。
现在,如果您 return true,则按下的字符将反映在文本字段中,如果您 return false,则输入将被丢弃。
所以第一次你的 string.count
将是 1 但你的 textfeild.text.count
将是 0。
查看您的验证码,我建议您在文本字段中添加一个 IBAction
以进行编辑更改
你的验证函数是做什么的?为什么默认情况下 returning true
?
shouldChangeCharactersIn
应该 return 您的验证函数的结果。