UITextFieldDelegate, проверка наличия текста в textFields

У меня небольшая проблема. В моем TableView есть два textFields, которые устанавливают свойство объекта. Для этого я хочу заставить пользователя написать что-то в textField, прежде чем строка будет фактически установлена ​​для объекта. Так что в основном простой ([textField.text length] > 0) вещь. Но я хочу, чтобы пользователь написал строки в обоих текстовых полях, чтобы наконец включить кнопку "Готово". Я решил это раньше, но только с одним текстовым полем со следующим UITextFieldDelegate метод.

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSString *newText = [theTextField.text stringByReplacingCharactersInRange:range withString:string];
        self.doneBarButton.enabled = ([newText length] > 0);
        return YES;
    }

Мое решение для новой проблемы, так что теперь с двумя textFields это:

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newText = [theTextField.text stringByReplacingCharactersInRange:range withString:string];

    if ([theTextField.placeholder isEqualToString:@"textField1"]) {
        if ([theTextField.text length] > 0) {
            enabledVokabel = YES;
        } else {
            enabledVokabel = NO;
        }
    }
    if ([theTextField.placeholder isEqualToString:@"textField2"]) {
        if ([theTextField.text length] > 0) {
            enabledUebersetung = YES;
        } else {
            enabledUebersetung = NO;
        }
    }

    self.doneBarButton.enabled = (enabledVokabel && enabledUebersetung);
    return YES;
}

Поэтому я хочу, чтобы doneBarButton был включен, когда оба textFields (textField1 и textField2) заполнены текстом. Но я хочу, чтобы, если пользователь удалил текст, который он только что написал в doneBarButton, он отключается, как только текстовые поля становятся пустыми. Это не работает таким образом. У тебя есть решение? Или, может быть, лучший способ решить это?

2 ответа

Решение

Либо просто подключите значение, измененное в interface Builder, к методу IBAction в любом из классов, которые у вас есть в вашем представлении. Или вы можете сделать это в коде с:

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

И проверьте длину ввода.

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

Я бы сохранил ссылку на оба UITextViewsПозвольте сказать.

IBOutlet UITextView *textView1;
IBOutlet UITextView *textView2;

правильно связано с вашим xib/storyboards, Кроме того, я бы предпочел использовать

- (void)textViewDidChange:(UITextView *)textView

Перезвоните. В соответствии с документом shouldChangeCharactersInRange похоже, что этот метод вызывается до фактического изменения текста.

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

self.doneBarButton.enabled = [textView1.text length] > 0 && [textView2.text length] > 0;
Другие вопросы по тегам