2009-09-16 12 views
9

Soy bastante nuevo en el desarrollo de iPhone y tengo lo que parece ser una pregunta simple que no puedo entender. ¿Cómo puedo verificar que un usuario ingrese un número y un decimal en el campo de texto?Cómo verificar la entrada en UITextField (es decir, entrada numérica)

He intentado muchas cosas diferentes, pero los cierres que puedo obtener solo permiten cadenas numéricas de la forma: 5.34 o 23.89. Lo necesito para permitir números como; 0.50 o 432.30, solo algo con un cero como el último valor de entrada. Intenté comprobar la entrada de cadena convirtiéndola en un flotante y luego de vuelta a una cadena, pero obtengo los resultados antes mencionados.

CUALQUIER ayuda sería genial (¡lo mismo con el código de muestra!) ¡GRACIAS!

+2

Su enlace lleva a ninguna parte ... –

Respuesta

1

La pregunta que Dave DeLong estaba tratando de publicar es 1320295 y parece muy relevante. Esto parece ser una vieja pregunta, probablemente haya encontrado su solución, Sería bueno si la comparte, todos =)

1

Puede convertir el contenido de su campo de texto en float y formatearlo usando el siguiente código:

float myFloat = [myTextField floatValue]; 
NSString *formatString = [NSString stringWithFormat:@"%%1.%if", 2]; //2 decimals after point 
NSString *resultString = [NSString stringWithFormat:formatString, myFloat]; 

Si desea permitir sólo valores numéricos en el campo de texto, sólo pueden reput la resultString en su textField por lo que cualquier texto no permitido será reemplazado por el valor de coma flotante con formato.

Si el usuario pone "abc12.4" el resultado será "0". Por lo que sería mejor si se utiliza el método UITextFieldDelegate:

textField:shouldChangeCharactersInRange:replacementString: 

para comprobar la última llave girada por el usuario. Simplemente puede compararlo para saber si es un valor numérico o un punto/coma.

13

Tenía un requisito similar y la solución finalmente resultó ser bastante trivial. Desafortunadamente, muchas de las preguntas y respuestas relacionadas con esta pregunta se refieren a la validación o al formateo de valores numéricos, no a que controlan lo que un usuario podría ingresar.

La siguiente implementación del método delegado shouldChangeCharactersInRange es mi solución. Como siempre, RegularExpressions se mueve en esta situación. RegExLib.com es una excelente fuente para RegEx's útiles. No soy un gurú de RegEx y siempre me cuesta un poco armarlos para que cualquier sugerencia para mejorarlo sea bienvenida.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == self.quantityTextField) 
    { 
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

     NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$"; 
     NSError *error = nil; 

     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                       options:NSRegularExpressionCaseInsensitive 
                       error:&error]; 
     NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString 
                  options:0 
                   range:NSMakeRange(0, [newString length])];   
     if (numberOfMatches == 0) 
      return NO;   
    } 

    return YES; 
} 

El código anterior permite al usuario introducir estos tipos de valores: 1, 1.1, 1.11, 0.11, .1

+0

Greate, el trabajo para mí .... guardar mi tiempo ... :) – Dhaval

+0

Este también pasa floats negativos @ "^ (-)? ([0-9] +)? (\\. ([0-9] {1,2})?)? ps –

Cuestiones relacionadas