Отключить кнопку, пока текстовые поля не были введены?

У меня есть несколько uitextfields в представлении, и я хотел бы отключить uibutton, пока во всех полях что-то не введено в них. Какой лучший способ сделать это? В идеале, я хотел бы также провести некоторую базовую проверку (убедитесь, что все записи являются числами).

РЕДАКТИРОВАТЬ

Не удалось получить приведенные ниже решения для полной работы. Ниже приведена версия, с которой я работал (собрал вместе из Брэда, Майка и других источников)

Используйте UITextFieldDelegate

Создайте текстовые поля в IB и прикрепите к соответствующим IBOutlets - textField1, textField2 и т. Д.

Создайте и подключите кнопку к соответствующему IBOutlet (submitButton) и IBAction (submitAction) в IB. Снимите флажок в IB.

Создайте метод validate в контроллере представления:

-(IBAction)validateTextFields:(id)sender
    {
        // make sure all fields are have something in them
        if ((textField1.text.length  > 0) && (textField2.text.length > 0)  && (textField3.text.length > 0)) {
            self.submitButton.enabled = YES;
        }
        else {
            self.submitButton.enabled = NO;
        }
    }

Подключите каждое поле 'Редактирование изменения' к методу validateTextFields. (Примечание: событие «Значение изменено» не работает)

Используйте этот метод делегата, чтобы ограничить количество символов (в моем случае цифрами и до одной точки). Этот бит от Эрики Садун, кстати.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs;
    NSString *filtered;
    // Check for period
    if ([textField.text rangeOfString:@"."].location == NSNotFound)
    {
        cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
        filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        return [string isEqualToString:filtered];
    }
    // Period is in use
    cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return [string isEqualToString:filtered];
}

Вуаля.

Ответы на вопрос(4)

Ваш ответ на вопрос