поставить число символов и ограничение типа символов для текстового поля Swift 4 - PullRequest
0 голосов
/ 30 апреля 2018

Я хотел бы установить ограничение для текстового поля. Пример: максимальное количество символов должно быть 6, и символы могут быть только цифрами. Но я не мог поместить эти два элемента управления в одну функцию.

Первая функция для подсчета текста:

func textFieldCharacterCountLimit(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let maxLength = 6
    let currentString: NSString = txt_phone_no_verification_code.text! as NSString
    let newString: NSString =
        currentString.replacingCharacters(in: range, with: string) as NSString
    return newString.length <= maxLength
}

Вторая функция для типа текста:

func textFieldCharacterTypeLimit(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let allowedCharacters = CharacterSet.decimalDigits
    let characterSet = CharacterSet(charactersIn: string)
    return allowedCharacters.isSuperset(of: characterSet)
}

Кроме того, он также выдает ошибку. И функция textFieldCharacterCountLimit не работает. Я думаю, что получаю ошибку, потому что две функции влияют на одно и то же текстовое поле с возвратом. Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Допускается ввод только указанного набора символов в данное текстовое поле с определенным диапазоном

   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string.count == 0 {
            return true
        }
        let currentText = textField.text ?? ""
        let prospectiveText = (currentText as NSString).replacingCharacters(in: range, with: string)

        return prospectiveText.containsOnlyCharactersIn(matchCharacters: "0123456789") &&
            prospectiveText.count <= 6

    }

Удлинение строки с условием

extension String {

    // Returns true if the string contains only characters found in matchCharacters.
    func containsOnlyCharactersIn(matchCharacters: String) -> Bool {

        let disallowedCharacterSet = NSCharacterSet(charactersIn: matchCharacters).inverted
        return self.rangeOfCharacter(from: disallowedCharacterSet as CharacterSet) == nil
    }
}

Как запрограммировать текстовое поле iOS, которое принимает только числовой ввод с максимальной длиной

http://www.globalnerdy.com/2015/04/27/how-to-program-an-ios-text-field-that-takes-only-numeric-input-or-specific-characters-with-a-maximum-length/

0 голосов
/ 30 апреля 2018

Вы не можете просто составить имена методов делегата. Вам необходимо реализовать правильный метод и выполнить все необходимые проверки одним методом.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    if newString.count > 6 {
        return false
    }

    return newString.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}
...