Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 允许使用字符集退格_Ios_Swift_Uitextfield - Fatal编程技术网

Ios 允许使用字符集退格

Ios 允许使用字符集退格,ios,swift,uitextfield,Ios,Swift,Uitextfield,我在删除文本字段时遇到问题。所以我有一个只允许字母的人名文本字段。但当我点击删除或退格键时,它似乎不起作用。这就是我的代码的样子 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let set = CharacterSet.letter return (string.ra

我在删除文本字段时遇到问题。所以我有一个只允许字母的人名文本字段。但当我点击删除或退格键时,它似乎不起作用。这就是我的代码的样子

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let set = CharacterSet.letter
    return (string.rangeOfCharacter(from: set) != nil)
}

我不知道为什么退格/删除不起作用

当用户点击退格键时,
string
将是空字符串。因此
rangeOfCharacter
将为
nil
,因此您的代码返回
false
以防止退格工作

试试这个:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
        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
        } 

如果正则表达式的
rangeOfCharacter
nil
则点击backspace检查backspace code并返回false,否则返回true

试试这个:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
        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
        } 

谢谢@rmaddy。我在这里呆了一段时间,想知道为什么它不起作用,谢谢。