2009-09-16 10 views
9

Je suis relativement nouveau dans le développement de l'iPhone et j'ai une question que je ne peux pas résoudre. Comment puis-je vérifier qu'un utilisateur saisit un nombre et une décimale dans le champ de texte?Comment vérifier l'entrée dans UITextField (c'est-à-dire, saisie numérique)

J'ai essayé beaucoup de choses différentes mais les fermetures que je peux obtenir ne permettent que des chaînes numériques du formulaire: 5.34 ou 23.89. J'en ai besoin pour permettre des nombres tels que; 0.50 ou 432.30, juste quelque chose avec un zéro comme dernière valeur d'entrée. J'ai essayé de vérifier l'entrée de la chaîne en la convertissant en un flottant, puis en revenant à une chaîne, mais en obtenant les résultats mentionnés ci-dessus.

N'importe quelle aide serait grande (même avec l'exemple de code!) MERCI!

+2

Votre lien ne mène nulle part ... –

Répondre

1

La question que Dave DeLong essayait d'afficher est 1320295 et semble très pertinente. Cela semble être une vieille question, vous avez probablement trouvé votre solution, serait bien si vous le partagez =)

1

Vous pouvez lancer le contenu de votre textfield dans float et le formater en utilisant le code ci-dessous:

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

Si vous souhaitez autoriser que des valeurs numériques dans votre champ de texte, vous pouvez simplement reput le ResultString dans votre textField de sorte que tout texte ne sera autorisé remplacé par la valeur flottante en forme.

Si l'utilisateur met "abc12.4" le résultat sera "0". Donc, il serait mieux si vous utilisez la méthode UITextFieldDelegate:

textField:shouldChangeCharactersInRange:replacementString: 

pour vérifier la dernière clé tapé par l'utilisateur. Vous pouvez simplement le comparer pour savoir s'il s'agit d'une valeur numérique ou d'un point/virgule.

13

J'avais une exigence similaire et la solution s'est avérée finalement assez triviale. Malheureusement de nombreuses questions et réponses liées à cette question concernent la validation ou la mise en forme des valeurs numériques, et non contrôlant ce qu'un utilisateur peut saisir.

L'implémentation suivante de la méthode de délégation shouldChangeCharactersInRange est ma solution. Comme toujours, RegularExpressions est dans cette situation. RegExLib.com est une excellente source pour les RegEx utiles. Je ne suis pas un gourou RegEx et je me bats toujours un peu pour les mettre ensemble afin que toutes les suggestions pour l'améliorer soient les bienvenues.

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

Le code ci-dessus permet à l'utilisateur d'entrer ces types de valeurs: 1, 1.1, 1.11, .1, .11

+0

Greate, le travail pour moi .... sauver mon temps .... :) – Dhaval

+0

Celui-ci passe également des flottants négatifs @ "^ (-)? ([0-9] +)? (\\. ([0-9] {1,2})?)? $ " –

Questions connexes