2009-03-20 7 views
8

J'essaie de convertir une chaîne de chiffres, entrée par l'utilisateur, en une chaîne sexy comme Phone.app sur l'iPhone. Voici le code que j'utilise, qui ne fonctionne pas (aucun format spécial ne sort) et après un certain nombre de chiffres, il commence juste à ajouter "0" à la fin de la chaîne.NSNumberFormatter pour formater les numéros de téléphone américains

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterNoStyle]; 
[formatter setPositiveFormat:@"+# (###) ###-###"]; 
[formatter setLenient:YES]; 
NSString *strDigits = [self stringByReplacingOccurrencesOfRegex:@"[^0-9+]" withString:@""]; 
return [formatter stringFromNumber:[NSNumber numberWithDouble:[strDigits doubleValue]]]; 

Répondre

11

Je pense que votre problème est que NSNumberFormatter ne prend pas en charge les crochets, les espaces ou les tirets. J'ai essayé d'implémenter la même méthode que vous et elle a échoué silencieusement et juste sortie du texte non formaté.

Le problème général ici est que le SDK iPhone ne fournit pas une méthode pour formater les numéros de téléphone d'une manière dépendante des paramètres régionaux.

J'ai soulevé des bugs avec Apple pour les éléments suivants (deux d'entre eux étaient des doubles de problèmes connus donc j'ai inclus bug d'origine d'Apple # pour ceux):

#6933244 - Need iPhone SDK interface to format text as locale dependent phone number 
#5847381 - UIControl does not support a setFormatter method 
#6024985 - Overridden UITextField drawTextInRect method is never called 

Dans un monde idéal d'Apple fournirait une NSPhoneNumberFormatter, et vous appelleriez setFormatter sur votre UIControl ainsi il a affiché text dans une belle manière gentille. Malheureusement, cela n'existe pas sur l'iPhone.

2

Eh bien un numéro de téléphone doit être de 10 caractères (11 avec le premier 1), vous devez donc commencer par changer ceci:

[formatter setPositiveFormat:@"+# (###) ###-####"]; 

Et en parlant des principaux 1, vous devez vérifier cela aussi.

9

Le fichier UIPhoneFormats.plist contient des formats de téléphone prédéfinis pour chaque paramètre régional. Donc, si vous n'êtes intéressé que par les numéros de téléphone des États-Unis, vous devrez tenir compte de ces formats:

+1 (###) ### - ####
1 (###) ### - ####
011 $
### - ####
(###) ### - ####

je devais faire quelque chose de similaire , et j'ai partagé les résultats que j'ai eu ici: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

2

Apple dit que vous pouvez implémenter votre formateur personnalisé si la fonctionnalité existante des formateurs n'est pas suffisante:

NSFormatter est destiné à la sous-classe. Un formateur personnalisé peut restreindre l'entrée et améliorer l'affichage des données de manière novatrice. Par exemple, vous pouvez avoir un formateur personnalisé qui garantit que les numéros de série entrés par un utilisateur sont conformes aux formats prédéfinis. Avant de décider de créer un formateur personnalisé, assurez-vous que vous ne pouvez pas configurer les sous-classes publiques NSDateFormatter et NSNumberFormatter pour répondre à vos besoins. Pour plus d'informations sur la création de votre propre formateur personnalisé, voir Création d'un formateur personnalisé.

Voir the section in Data Formatting Guide

Questions connexes