Schaltfläche deaktivieren, bis Textfelder eingegeben wurden?

Ich habe mehrere uitext-Felder in einer Ansicht und möchte den uibutton deaktivieren, bis in alle Felder etwas eingegeben wurde. Wie geht das am besten? Im Idealfall möchte ich auch eine grundlegende Überprüfung durchführen (stellen Sie sicher, dass alle Einträge Zahlen sind).

BEARBEITE

Konnte die Lösungen unten nicht ganz zum Laufen bringen. Unten ist die Version, mit der ich gearbeitet habe (zusammengeschustert von Brad, Mike und verschiedenen anderen Quellen)

Verwende das UITextFieldDelegate

Erstellen Sie Textfelder in IB und hängen Sie sie an die entsprechenden IBOutlets an - textField1, textField2 usw.

Erstellen und verbinden Sie die Schaltfläche mit dem entsprechenden IBOutlet (submitButton) und IBAction (submitAction) in IB. Deaktivieren Sie das Kontrollkästchen in IB aktiviert.

Erstellen Sie eine Validierungsmethode im View-Controller:

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

Hookup jedes Feldereignis 'Bearbeitung geändert' in die validateTextFields-Methode umwandeln. (Hinweis: Das Ereignis "Wert geändert" scheint nicht zu funktionieren.)

Verwenden Sie diese Delegatmethode, um Zeichen zu begrenzen (in meinem Fall auf Zahlen und bis zu einem Punkt). Dieses Stück ist übrigens von Erica Sadun.

-(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.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage