¿Deshabilitar el botón hasta que se hayan ingresado los campos de texto?

Tengo varios uitextfields dentro de una vista y me gustaría desactivar el uibutton hasta que todos los campos tengan algo ingresado en ellos. ¿Cuál es la mejor manera de hacer esto? Idealmente, me gustaría hacer una validación básica (asegúrese de que todas las entradas sean números) también.

EDITAR

No se pudieron obtener las siguientes soluciones para que funcionen. A continuación se muestra la versión en la que trabajé (combinada de Brad, Mike y varias otras fuentes)

Utilice el UITextFieldDelegate

Cree campos de texto en IB y adjúntelos a los IBOutlets relevantes: textField1, textField2, etc.

Cree y conecte el botón a su IBOutlet relevante (submitButton) e IBAction (submitAction) en IB. Desmarque habilitado en IB.

Cree un método de validación en el controlador de vista:

-(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;
        }
    }

Conecte el evento 'Editing Changed' de cada campo al método validateTextFields. (Nota: el evento 'Valor cambiado' no parece funcionar)

Use este método de delegado para limitar los caracteres (en mi caso a números y hasta un punto y coma). Este bit es de Erica Sadun por cierto.

-(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];
}

Voila

Respuestas a la pregunta(4)

Su respuesta a la pregunta