2009-03-20 14 views
8

Estoy tratando de convertir una cadena de números, introducidos por el usuario, en una secuencia sexy como Phone.app en el iPhone. Aquí está el código que estoy usando, que no funciona (no sale ningún formato especial) y después de un cierto número de dígitos simplemente comienza a agregar "0" al final de la cadena.NSNumberFormatter para formatear números de teléfono de EE. UU.

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]]]; 

Respuesta

11

Creo que su problema es que NSNumberFormatter no admite corchetes, espacios o guiones. Traté de implementar el mismo método que tú y falló en silencio y solo arrojó texto sin formato.

El problema general aquí es que el iPhone SDK no proporciona un método para formatear los números de teléfono de una manera dependiente de la configuración regional.

he planteado errores con Apple para el siguiente (dos de ellos eran duplicados de problemas conocidos por lo que he incluido de Apple fallo original # para aquellos):

#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 

En un mundo ideal Apple podría proporcionar una NSPhoneNumberFormatter, y llamaría al setFormatter en su UIControl para que se muestre text de una manera bonita y bonita. Desafortunadamente eso no existe en el iPhone.

2

bien un número de teléfono debe ser de 10 personajes (11 con el que lleva 1), por lo que debe empezar por cambiar esto:

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

Y hablando de la principal 1, es necesario comprobar si hay eso también.

9

UIPhoneFormats.plist contiene formatos de teléfono predefinidos para cada configuración regional. Por lo tanto, si usted está interesado sólo en los números de teléfono de EE.UU., tendrá que tener en cuenta estos formatos:

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

que tenía que hacer algo similar , y compartí los resultados que obtuve aquí: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

2

Apple dice que puede implementar su formateador personalizado si la funcionalidad existente de los formateadores no es suficiente:

NSFormatter está destinado para la creación de subclases. Un formateador personalizado puede restringir la entrada y mejorar la visualización de datos de maneras novedosas. Por ejemplo, podría tener un formateador personalizado que asegure que los números de serie ingresados ​​por un usuario se ajusten a los formatos predefinidos. Antes de decidir crear un formateador personalizado, asegúrese de que no puede configurar las subclases públicas NSDateFormatter y NSNumberFormatter para satisfacer sus requisitos.

Para obtener instrucciones sobre cómo crear su propio formateador personalizado, consulte Creación de un formateador personalizado.

the section in Data Formatting Guide Ver

Cuestiones relacionadas