2012-01-26 15 views
9

Tengo un montón de UITextFields donde un usuario debe ingresar un número (el teclado es el teclado numérico) antes de presionar un botón de enviar. Cuando se presiona el botón de enviar, se llama a un método de "verificación" que quiere verificar si los datos son válidos ... también conocido como no vacío. Ahora esto sería fácil si fuera solo un campo de texto pero tengo 14. Quiero un enunciado if simple que compruebe si uno de los campos o todos los campos están vacíos ...¿Cómo comprobar si UITextFields está vacío?

Tengo el siguiente UITextFields declaró: number1, number2, number3 etc etc y tengo las siguientes cadenas declaradas que pueden tomar el valor de UITextField.text ... están declaradas: temp1, temp2, temp3 etc ...

cómo lo haría hacer una declaración de pseudocódigo if como la siguiente?

Gracias

if (!valid) 
{ 

NSLog (@"not valid) 
} 

else 
{ 
//proceed to next method 
} 

Respuesta

25

Supongo UITextField variable como * tfield así que aquí está la solución

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

¿Cómo funcionaría esto ya que no todas las variables de UITextField se pueden llamar * tfield?Gracias – Teddy13

+0

textFieldShouldReturn: (UITextField *) tfield use esta función de delegado nad ponga el código de arriba para verificar después de que el usuario presione el botón de retorno –

+0

Esto debería estar usando && en su lugar o || – user1686342

0
you can put like this 


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

¿No es el camino equivocado? Si todos no son iguales a '@" "', entonces es válido. – mattjgalloway

+0

sí, lo he corregido –

7

creo que algo como esto es lo que desea. Solo está usando isEqualToString: para verificar si la cadena está vacía.

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 
} 

Es posible que desee para recortar espacios en blanco cuando se agarra temp1 modo que @" " sería también estar en blanco. Para ello, echar un vistazo a NSString 's stringByTrimmingCharactersInSet: método de este modo:

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

Actualización:

Si desea hacerlo con una serie que podría hacer algo como:

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

Gracias, pero no es lo que tenía en mente ... ¿hay una manera más sencilla como quizás ponerlos todos en una matriz y luego verificar si la matriz contiene una cadena vacía? – Teddy13

+0

No sería mucho más rápido que escribir eso. Tendría que recorrer la matriz y ver si alguna de las cadenas está vacía. Depende un poco de cuántos tienes. – mattjgalloway

+0

@ Teddy13 agregó una gran variedad de formas de hacerlo si realmente quieres eso. – mattjgalloway

1

Algo como esto sería iterar a través de sus UITextFields:

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

o simplemente podría llamar

[myTextField hasText]; 

la que no devolverá si el campo está vacío.

Cuestiones relacionadas