2012-01-26 15 views
9

Mam kilka UITextFields, gdzie użytkownik musi wprowadzić numer (klawiatura jest klawiatura numeryczna) przed naciśnięciem przycisku przesyłania. Po naciśnięciu przycisku "wyślij" wywoływana jest metoda "sprawdź", która chce sprawdzić, czy dane są poprawne ... nie są puste. Teraz byłoby to łatwe, gdyby był tylko jeden textField, ale mam 14. Chcę proste if-instrukcja, która sprawdza, czy jeden z pól lub wszystkie pola są puste ....Jak sprawdzić, czy pola UITextField są puste?

Mam następujące UITextFields zadeklarowany: numer1, numer2, numer3 itd. itd. i mam zadeklarowane następujące łańcuchy, które mogą przyjąć wartość UITextField.text ... są zadeklarowane: temp1, temp2, temp3 itd ...

jak bym przejdź do robienia pseudokod, jeśli instrukcja taka jak poniżej?

Dzięki

if (!valid) 
{ 

NSLog (@"not valid) 
} 

else 
{ 
//proceed to next method 
} 

Odpowiedz

25

Przypuszczam, że zmienna UITextField jako * tfield, więc tutaj jest rozwiązanie

if (tfield.text.length > 0 || tfield.text != nil || ![tfield.text isEqual:@""]) 
{ 
    //do your work 
} 
else 
{ 
    //through error 
} 
+0

Jak by to działało, ponieważ nie wszystkie moje zmienne UITextField mogą być nazwane * tfield?Dzięki – Teddy13

+0

textFieldShouldReturn: (UITextField *) tfield korzysta z tej delegowanej funkcji i umieść w niej powyższy kod, aby sprawdzić po naciśnięciu przycisku zwrotu przycisku –

+0

Powinno to być przy użyciu && zamiast lub || – user1686342

0
you can put like this 


    if(![temp1 isEqualToString:@""] && ![temp2 isEqualToString:@""] ... ![temp14 isEqualToString:@""]) 
    { 
    NSLog (@" valid); 
    } 
    else 
    {NSLog (@"not valid); 
} 
+0

Czy nie jest to niewłaściwy sposób? Jeśli wszystkie nie są równe '@" "', to jest poprawne. – mattjgalloway

+0

Tak, mam to poprawić –

7

Myślę, że coś takiego jest, co chcesz. Używa tylko isEqualToString:, aby sprawdzić, czy ciąg znaków jest pusty.

NSString *temp1 = number1.text; 
NSString *temp2 = number2.text; 
... ///< temp3, etc 

if ([temp1 isEqualToString:@""]) { 
    // temp1 not valid 
} else if ([temp2 isEqualToString:@""]) { 
    // temp2 not valid 
} ... { 
    // temp3, etc 
} else { 
    // Valid 
} 

Możesz przyciąć białe znaki podczas zgrywania temp1 tak że @" " byłoby również puste. Do tego przyjrzeć NSString „s stringByTrimmingCharactersInSet: metoda tak:

NSString *temp1 = [number1.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

Aktualizacja:

Jeśli chcesz to zrobić z tablicą mógłby zrobić coś takiego:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:0]; 
[array addObject:number1.text]; 
[array addObject:number2.text]; 
... ///< number3, etc 

BOOL ok = YES; 
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isEqualToString:@""]) { 
     ok = NO; 
     *stop = YES; 
    } 
}]; 

if (ok) { 
    // Valid 
} else { 
    // Not valid 
} 
+0

Dzięki, ale nie to, co miałem na myśli ... czy istnieje prostszy sposób, jak na przykład umieszczenie wszystkich w tablicy, a następnie sprawdzenie, czy tablica zawiera pusty ciąg znaków? – Teddy13

+0

Nie byłoby to o wiele szybsze niż napisanie tego. Musiałbyś przejrzeć tablicę i sprawdzić, czy któryś z łańcuchów jest pusty. Zależy trochę od tego, ile masz. – mattjgalloway

+0

@ Teddy13 dodał szykowną metodę robienia tego, jeśli naprawdę tego chcesz. – mattjgalloway

1

Coś takiego byłoby iterację swoimi UITextFields:

[self.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isKindOfClass:[UITextField class]]) { 
    // do your checks 
    } 
}]; 
5

lub można po prostu zadzwonić

[myTextField hasText]; 

która nie zwraca, jeśli pole jest puste.

Powiązane problemy