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

У меня небольшая проблема. В моем TableView есть два текстовых поля, которые устанавливают свойство объекта. Для этого я хочу заставить пользователя написать что-то в 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;
    }

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

- (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 был включен, когда оба текстовых поля (textField1 и textField2) заполнены текстом. Но я хочу, чтобы, если пользователь удалил текст, который он / она только что написал в doneBarButton, он был отключен, как только текстовые поля пусты. Это не работает таким образом. У тебя есть решение? Или, может быть, лучший способ решить это?


person Gustl007    schedule 13.10.2013    source источник
comment
[Событие изменения текста UITextField][1] Надеюсь, это немного поможет! [1]: stackoverflow.com/questions/7010547/   -  person Lauren Grimes    schedule 13.10.2013


Ответы (2)


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

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

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

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

person Peter Segerblom    schedule 13.10.2013

Я бы сохранил ссылку на оба 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;
person ssantos    schedule 13.10.2013
comment
mhh, у меня действительно нет опыта работы с textViews. Я начинающий. Но я попробую. Но решение только для одного текстового поля отлично работает с shouldChangeCharactesInRange.. - person Gustl007; 13.10.2013