允许使用字符集退格
Allow Backspace with character set
我在删除文本字段时遇到问题。所以我有一个只允许字母的人名文本字段。但是当我点击删除或退格键时,它似乎不起作用。这就是我的代码的样子。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let set = CharacterSet.letter
return (string.rangeOfCharacter(from: set) != nil)
}
我不确定为什么 backspace/delete 不起作用。
当用户点击退格键时,string
将是空字符串。所以 rangeOfCharacter
将是 nil
所以你的代码 returns false
阻止退格键工作。
试试这个:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
当您点击退格键时,如果您的正则表达式的 rangeOfCharacter
是 nil
,则 return 返回退格代码和 return 错误,否则 return 正确。
试试这个:
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
}
我在删除文本字段时遇到问题。所以我有一个只允许字母的人名文本字段。但是当我点击删除或退格键时,它似乎不起作用。这就是我的代码的样子。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let set = CharacterSet.letter
return (string.rangeOfCharacter(from: set) != nil)
}
我不确定为什么 backspace/delete 不起作用。
当用户点击退格键时,string
将是空字符串。所以 rangeOfCharacter
将是 nil
所以你的代码 returns false
阻止退格键工作。
试试这个:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
当您点击退格键时,如果您的正则表达式的 rangeOfCharacter
是 nil
,则 return 返回退格代码和 return 错误,否则 return 正确。
试试这个:
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
}