Проверка текстового поля во время ввода текста - PullRequest
0 голосов
/ 26 мая 2018

Я разбираюсь с функциями текстового поля, которые позволяют вам проверять, когда происходит "didEndEditing" или "shouldStartEditing".

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

Проблема Если у вас есть только одно текстовое поле и одна кнопка на странице, где я требую, чтобы для ввода в текстовое поле перед включением кнопки были разрешены только целые числа, как мне этого добиться?

т.е. кнопка отключена.Как я вводить текст в текстовое поле, если только целые числа, затем включить кнопку.Если что-то не так, в реальном времени, когда вы печатаете.

Поскольку есть только одно текстовое поле, я не думаю, что могу использовать «didEndEditing», потому что вы никогда не «покидаете» текстовое поле (больше нечего нажимать)

Что я пробовал Я пробовал это:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    print("While entering the characters this method gets called")
    if textField === timeInputField {

//set which characters are valid
        let invalidCharacters = CharacterSet(charactersIn: "0123456789").inverted


//if text isn't empty then hide the error label ("must input a time")             
        if timeInputField.text?.isEmpty == false {
            timeInputErrorLabel.isHidden = true
        }

//if the string returns values in the range set button to enabled
        return string.rangeOfCharacter(from: invalidCharacters, options: [], range: string.startIndex ..< string.endIndex) == nil
    } else {
        doWorkoutButtonOutlet.isEnabled = true
    }
    return true
}

Я думаю, что я по сути пытаюсь достичь этого Нужно включить кнопку при вводе текста в поле. в Swift 4!

1 Ответ

0 голосов
/ 26 мая 2018

Это предотвратит ввод значений textField, кроме целых чисел.Не забудьте выполнить проверку, для которой textField, если используется более одного.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    if numbers.contains(string ?? "") {
        // Validate text for button enabling
        if let stringValue = textField.text {
            if let number = Int(stringValue) {
                yourButton.isEnabled = true
                // Text validated as an integer. Can use value of number if desired
            } else {
                yourButton.isEnabled = false
            }
        } else {
            yourButton.isEnabled = false
        }
        // Return true to update field with new character
        return true
    } else {
        // Return false as entered character is not a digit 0-9
        return false
    }
}

Вы также можете проверить текст в этом методе делегата:

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    if let stringValue = textField.text {
        if let number = Int(stringValue) {
            yourButton.isEnabled = true
            // Do something with number value
            return true
        }
    }
    return false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...