Предотвратить с UITextField от входа с aphabetic персонажей


Цель состоит в том, чтобы запретить ввод букв в качестве вклада в UITextField.

Пожалуйста, скажите мне, если этот подход будет удобно.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let charSet = CharacterSet.letters
        let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
        let replacementTextHasDecimalSeparator = string.range(of: ".")
        let existingTextHasAlphabeticCharacters = textField.text?.rangeOfCharacter(from: charSet)
        let replacementTextHasAlphabeticCharacters = string.rangeOfCharacter(from: charSet)

        if existingTextHasDecimalSeparator != nil,
            replacementTextHasDecimalSeparator != nil {
            return false
        } else if existingTextHasAlphabeticCharacters != nil ||
                    replacementTextHasAlphabeticCharacters != nil {
                return false
        } else {
            return true
        }
    }


6062
0
задан 13 февраля 2018 в 06:02 Источник Поделиться
Комментарии
1 ответ

Если вы хотите запретить Буквы в качестве входных данных, поэтому вы также проверить старую строку из текстового поля? А зачем вам тест, если старая и новая строка содержит точку? Самое простое решение запретить письма заключается в использовании одного вкладыша

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

или

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.rangeOfCharacter(from: CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) == nil
}

если вы хотите быть более конкретным о недопустимые символы.

2
ответ дан 21 февраля 2018 в 09:02 Источник Поделиться