如何使用PhoneNumberFormatter类格式化UITextField中的电话号码?

时间:2011-08-25 01:15:45

标签: iphone ios uitextfield

我一直在寻找一些关于尝试将UITextField自动格式化为电话号码的线程。我看到了Ahmed Abdelkader的PhoneNumberFormatter类(http://the-lost-beauty.blogspot.com/2010/01/auto-formatting-phone-number.html)的链接

但我不明白如何实际实现它。我有两个UITextFields,我希望与该类一起使用,其形式包含许多其他UITextField用于其他目的。

艾哈迈德的例子是:

UITextField *myTextField;
int myTextFieldSemaphore;
PhoneNumberFormatter *myPhoneNumberFormatter;
NSString *myLocale; //@"us"

//init semaphore
myTextFieldSemaphore = 0;

//bind events
[myTextField addTarget:self
                action:@selector(autoFormatTextField:)
      forControlEvents:UIControlEventEditingChanged
];

//handle events
- (void)autoFormatTextField:(id)sender {
  if(myTextFieldSemaphore) return;
 myTextFieldSemaphore = 1;
 myTextField.text = [phoneNumberFormatter format:myTextField.text withLocale:myLocale];
 myTextFieldSemaphore = 0;
}

我不确定在哪里放置上面的代码,或者如何在我的属性中代替他的变量。到目前为止,我只能得到文本字段拒绝输入:/ - 有没有人有一个更完整的实现这个类的例子?

3 个答案:

答案 0 :(得分:2)

只需将此代码放在实现UITextFieldDelegate的类中。 myTextField应替换为您的UITextField实例。您应该获取设备的当前区域设置,而不是使用myLocale。 PhoneNumberFormatter可以分配&使用后释放。

- (void)autoFormatTextField:(id)sender
{
     if(myTextFieldSemaphore) return;
         myTextFieldSemaphore = 1;

     PhoneNumberFormatter* phoneNumberFormatter = [[PhoneNumberFormatter alloc] init];
     myTextField.text = [phoneNumberFormatter format:myTextField.text withLocale:[[NSLocale currentLocale] localeIdentifier]];
     [phoneNumberFormatter release];
     myTextFieldSemaphore = 0;
}

HTH,

阿克沙伊

答案 1 :(得分:1)

原来我能够在IB中将其挂钩而不是使用该绑定语句。效果很好!唯一的问题是currentLocale建议与类中的假设不匹配,所以我必须编辑类以使用en_US而不是我们

答案 2 :(得分:0)

您还可以使用google javascript“phoneutil”库格式化电话号码。我做得很好。步骤进行:

  1. 添加javascript库。
  2. 创建一个webview。
  3. 创建一个html文件(包括phoneutil库的所有标题)。
  4. 像普通的html文件一样,创建一个   

    //在此处编写自定义函数以获取格式化的电话号码 .. .. ..