我一直在寻找一些关于尝试将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;
}
我不确定在哪里放置上面的代码,或者如何在我的属性中代替他的变量。到目前为止,我只能得到文本字段拒绝输入:/ - 有没有人有一个更完整的实现这个类的例子?
答案 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”库格式化电话号码。我做得很好。步骤进行:
像普通的html文件一样,创建一个
//在此处编写自定义函数以获取格式化的电话号码 .. .. ..