2009-03-20 4 views
8

Я пытаюсь преобразовать строку цифр, введенную пользователем, в сексуальную строку, такую ​​как Phone.app на iPhone. Вот код, который я использую, который не работает (не появляется специальный формат), и после некоторого количества цифр он просто начинает добавлять «0» в конец строки.NSNumberFormatter для форматирования телефонных номеров США

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

ответ

11

Я думаю, что ваша проблема в том, что NSNumberFormatter не поддерживает скобки, пробелы или тире. Я попытался реализовать тот же метод, что и вы, и он потерпел неудачу, и просто выводит неформатированный текст.

Общая проблема заключается в том, что iPhone SDK не предоставляет способ форматирования телефонных номеров в зависимости от языка.

Я поднял ошибки с Apple, для следующего (два из них дублирует известные проблемы, поэтому я включил оригинальную ошибку Apple, # для тех, кто):

#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 

В идеальном мире Apple, предоставит NSPhoneNumberFormatter, и вы назовете setFormatter на свой UIControl, чтобы он отображал text в красивом хорошем стиле. К сожалению, этого не существует на iPhone.

2

Ну телефонный номер должен быть 10 символов (11 с ведущим 1), так что вы должны начать с изменения этого:

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

И если говорить о ведущей 1, вы должны проверить это тоже.

9

UIPhoneFormats.plist содержит предопределенные форматы телефонов для каждого региона. Таким образом, если вы заинтересованы только в телефонных номеров США, вам необходимо рассмотреть следующие форматы:

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

я должен был сделать что-то подобное , и я поделился результатами, которые я получил здесь: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

2

Apple заявляет, что вы можете реализовать свой собственный форматировщик, если недостаточно функциональных возможностей formatters:

NSFormatter предназначен для подкласса. Пользовательский форматтер может ограничивать ввод и улучшать отображение данных по-новому. Например, у вас может быть собственный форматировщик, который гарантирует, что порядковые номера, введенные пользователем, соответствуют предопределенным форматам. Прежде чем вы решите создать собственный форматировщик, убедитесь, что вы не можете настраивать общедоступные подклассы NSDateFormatter и NSNumberFormatter для удовлетворения ваших требований.

Инструкции по созданию собственного пользовательского форматирования см. В разделе Создание настраиваемого форматирования.

См the section in Data Formatting Guide

Смежные вопросы