Включите UIBarButtonItem, если заполнены все поля UITextField - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть 3 UITextFields в сгруппированном UITableView, и я пытаюсь определить правильную логику, чтобы мой UIBarButtonItem был активирован, только когда ни одно из UITextFields не пусто.

В настоящее время я использую - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string метод делегата UITextField для обнаружения изменений символа поля за символом, но он дает противоречивые результаты.

Есть идеи?

Редактировать: вот код, который я сейчас использую. Как вы можете видеть, я поместил свои текстовые поля в массив, чтобы я мог перебирать их. Как и сейчас, кнопка сохранения не активируется, пока я не введу 2-й символ в 3-е поле. Также он поочередно включается / отключается как удаляющиеся символы один за другим из полей.

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    BOOL allValid;

    if (newString.length)
    {
        // Cycle through array checking for completeness
        for (int i = 0; i < [textFieldArray count]; i++)
        {
            if ([[[textFieldArray objectAtIndex:i] text] length] > 0)
            {
                allValid = YES;
                NSLog(@"TextField #%i Validates.", i);
            }
            else
            {
                allValid = NO;
                NSLog(@"TextField #%i Does Not Validate.", i);
            }
        }
    }
    else
    {
        NSLog(@"Invalid");
        allValid = NO;
    }

    if (allValid)
        [saveButton setEnabled:YES];
    else
        [saveButton setEnabled:NO];

    return YES;

Ответы [ 2 ]

0 голосов
/ 15 апреля 2010

Хорошо, вот как я, наконец, сделал это.

Я создал - (IBAction)validateFields:(id)sender и подключил его к выходу Editing Changed на UITextField. Похоже на это.

- (IBAction)validateFields:(id)sender
{
    BOOL valid = YES;

    // On every press we're going to run through all the fields and get their length values. If any of them equal nil we will set our bool to NO.
    for (int i = 0; i < [textFieldArray count]; i++)
    {
        if (![[[textFieldArray objectAtIndex:i] text] length])
            valid = NO;
    }

    [saveButton setEnabled:valid];
}

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

0 голосов
/ 15 апреля 2010

Как именно вы используете метод? Вот как бы я это сделал:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
  if (newString.length) {
    //If all the others are also non-empty, enable your button
  }
  return YES;
}

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

...