Разрешить Backspace с набором символов - PullRequest
0 голосов
/ 31 января 2019

У меня проблемы с удалением в моем текстовом поле.Таким образом, у меня есть текстовое поле для имени человека, разрешающего только буквы.Но когда я нажимаю «удалить» или «возврат», это, похоже, не работает.Вот как выглядит мой код.

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

Я не уверен, почему не работает возврат / удаление.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Когда вы нажимаете клавишу Backspace, проверяете код возврата и возвращаете false, если rangeOfCharacter для вашего регулярного выражения равно nil, в противном случае возвращает 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
        } 
0 голосов
/ 31 января 2019

Когда пользователь нажимает клавишу Backspace, string будет пустой строкой.Таким образом, rangeOfCharacter будет nil, поэтому ваш код возвращает false, препятствующий работе backspace.

Попробуйте:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return string.isEmpty || string.rangeOfCharacter(from: CharacterSet.letter) != nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...