Как проверить ввод текстового поля в режиме реального времени? - PullRequest
9 голосов
/ 13 декабря 2011

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

Как я могу это сделать?Пожалуйста, помогите мне, спасибо заранее.

Ответы [ 7 ]

25 голосов
/ 13 декабря 2011

Использование -textField:shouldChangeCharactersInRange:replacementString:, вероятно, является плохим решением, поскольку оно срабатывает до обновления текстового поля.Этот метод, вероятно, следует использовать, когда вы хотите изменить текст текстового поля, прежде чем клавиатура автоматически его обновит.Здесь вы, вероятно, захотите просто использовать сопряжение целевого действия при редактировании изменений значения:

[textField addTarget:self action:@selector(checkTextField:) forControlEvents:UIControlEventEditingChanged];

Затем, в - (void)checkTextField:(id)sender, попробуйте это:

UITextField *textField = (UITextField *)sender;
if ([textField.text length] == 8) {
    textField.textColor = [UIColor greenColor]; // No cargo-culting please, this color is very ugly...
} else {
    textField.textColor = [UIColor blackColor];
    /* Must be done in case the user deletes a key after adding 8 digits,
       or adds a ninth digit */
}
4 голосов
/ 01 апреля 2013
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

//    [textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]];
    NSLog(@"%@",searchStr);
    return YES;
}
3 голосов
/ 13 декабря 2011

Использовать UITextFieldDelegate .особенно эта функция

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

, и вы можете получить примеры кодов ссылок с здесь ..

2 голосов
/ 13 декабря 2011
[textField addTarget:self action:@selector(checkTextField) forControlEvents:UIControlEventEditingChanged];

Попробуй!

1 голос
/ 13 декабря 2011

Настройте делегата для UITextField и реализуйте метод – textField:shouldChangeCharactersInRange:replacementString: Подробности и примеры приведены в Справочнике по протоколу UITextFieldDelegate , но вот краткий пример:

- (BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string
{
        NSString *text = [textField text];
        // NOT BACKSPACE
        if ([string length] || text.length + string.length < 8) {
            return YES;
        } else if (text.length + string.length > 8) {
            return NO;
        } else {
                // DO SOMETHING FOR LENGTH == 8
                return YES;
        }
}   
0 голосов
/ 30 января 2019

Вот так вы получаете проверку в реальном времени, не устанавливая ничего, кроме делегата текстового поля:

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

    // Creating the future string. The incoming string can be a single character,
    // empty (on delete) or many characters when the user is pasting text.

    let futureString: String = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)

    // Determine if the change is allowed, update form, etc.
    let allowChange = <#Your Validation Code#>

    return allowChange
}

Добавьте этот код к назначенному делегату текстового поля.Простой.

0 голосов
/ 23 сентября 2017

Обновление Swift 4.0

 txtFieldAdd.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

Теперь вызовите вашу функцию. В моем случае это активирует кнопку сохранения

@objc func textFieldDidChange(_ textField: UITextField) {
    if (txtFieldAdd.text?.isEmpty)! {
        btnSave.isEnabled = false
    }
    else {
        btnSave.isEnabled = true
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...