UITextField разрешает только буквы и пробелы и ограничивает максимальное количество символов - PullRequest
0 голосов
/ 15 декабря 2018

В текстовом поле я хочу разрешить только буквы и пробелы.Следующее решение, кажется, работает, но у него есть несколько проблем

1) Это не позволяет места

2) Он подсчитывает числа при вводе и включает в общее количество для максимального предела, который не являетсяправильный.Мы должны только считать то, что видим в поле

Я искал решение, но большинство из них устарели или не подходят для этой цели.Любая помощь?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    // Don't allow number in name field
    if textField == nameTextField && string.count > 0 {
        let textString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        let LettersOnly = NSCharacterSet.letters
        let strValid = LettersOnly.contains(UnicodeScalar.init(string)!)
        return strValid && textString.count <= 30
    }

    return true
}

1 Ответ

0 голосов
/ 15 декабря 2018

Если я вас правильно понял, вы можете использовать что-то вроде следующего:

class ViewController: UIViewController, UITextFieldDelegate {

    let allowedCharacters = CharacterSet.letters.union(CharacterSet(charactersIn: " "))
    let maxLength = 10

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        // check characters
        guard newText.rangeOfCharacter(from: allowedCharacters.inverted) == nil else { return false }

        // check length
        guard newText.count <= maxLength else { return false }

        return true
    }

}

Или даже короче:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    return (newText.rangeOfCharacter(from: allowedCharacters.inverted) == nil) && (newText.count <= maxLength)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...