我在删除文本字段时遇到问题。所以我有一个只允许字母的人名文本字段。但是,当我点击删除或退格键时,它似乎不起作用。这就是我的代码。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let set = CharacterSet.letter
return (string.rangeOfCharacter(from: set) != nil)
}
我不确定为什么退格键/删除键不起作用。
答案 0 :(得分:3)
当用户点击退格键时,string
将为空字符串。因此rangeOfCharacter
将是nil
,因此您的代码将返回false
,从而使退格键无法正常工作。
尝试一下:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
答案 1 :(得分:0)
点击退格键以检查退格代码,如果正则表达式的rangeOfCharacter
为nil
,则返回false,否则返回true。
尝试一下:
let char = text.cString(using: String.Encoding.utf8)!
let isBackSpace = strcmp(char, "\\b")
if (isBackSpace == -92) {
}else if text.range(of: kRangeWithoutSpace, options:.regularExpression) == nil {
return false
}