电话号码格式ios

在我的应用程序中,我将电话号码作为用户的input。 数字应该是美国格式。 我想dynamic地显示它像(555)-888-888。 例如,当用户开始input数字,当他达到4位数时,它显示这样的数字(555)-4等等。 我试图replaceString方法,但我发现它不会工作。

查看NBAsYouTypeFormatter类的libPhoneNumber-iOS库。

您可以使用美国地区代码创buildNSAsYouTypeFormatter新实例:

 NBAsYouTypeFormatter *asYouTypeFormatter = [[NBAsYouTypeFormatter alloc] initWithRegionCode:REGION_CODE_STRING]; 

然后每次用户更改您拨打的电话号码:

- (NSString*)inputDigit:(NSString*)nextChar;

要么

- (NSString*)removeLastDigit;

从这两种方法返回的NSString是你dynamic格式化的电话号码。

我将从头开始解释。 所以,新用户可以从开始的方式。

从这里下载libPhoneNumber-iOS库。 在该链接页面的底部,您将find需要添加到项目中的文件。

现在,按照下面的步骤来实现。

(1)在视图控制器中导入需要格式化文本字段的文件。

 #import "NBPhoneMetaDataGenerator.h" #import "NBPhoneNumberUtil.h" #import "NBAsYouTypeFormatter.h" 

并在头文件中创buildNBAsYouTypeFormattertypes的实例:

 NBAsYouTypeFormatter *asYouTypeFormatter; 

(2)在视图控制器的viewDidLoad方法中,初始化之前拍摄的对象:

 asYouTypeFormatter = [[NBAsYouTypeFormatter alloc] initWithRegionCode:@"IN"]; 

注意:@“IN”是印度的。 你可以把它设置为任何你想要的。 请参阅将包含在libPhoneNumber-iOS库中的plist文件以查看区域代码的完整列表。

(3)UITextField委托方法中,dynamicpipe理你的文本字段的文本。

 #pragma mark #pragma mark - Phone Number textfield formatting # define LIMIT 18 // Or whatever you want - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Just allow 18 digits if(!(([string length] + range.location) > LIMIT)) { // Something entered by user if(range.length == 0) { [txtNumber setText:[asYouTypeFormatter inputDigit:string]]; } // Backspace else if(range.length == 1) { [txtNumber setText:[asYouTypeFormatter removeLastDigit]]; } } return NO; } 

希望能帮助到你 !!!

我find了一个我想要分享的解决scheme,因为即使采用之前提出的解决scheme,我也很难find如何使其工作。

我有一个tableView的单元格包含一个textField。 其中一个单元格带有电话号码。 在某些情况下,它可以已经被填充,或者不填充。

顺便说一句,这是在Swift中。


  1. 确保您的桥接头文件nameOfYourProject-Bridging-Header包含以下行:

     #import "NBAsYouTypeFormatter.h" 
  2. 声明NBAsYouTypeFormatter的属性:

     private var phoneFormatter: NBAsYouTypeFormatter! 
  3. 在viewDidLoad或属性的didSet中,用国家代码初始化NBAsYouTypeFormatter:

     // yourRegionCode is a 2-digit country code (ISO 3166) phoneFormatter = NBAsYouTypeFormatter(regionCode: yourRegionCode) 
  4. 声明你的viewController为TextFieldDelegate并实现函数shouldChangeCharactersInRange

     func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // Phone number cell if cellContainsPhoneNumber { // This is specific to your own tableView // Formatting phone number as you type let textWithoutSpaces = textField.text.stringByReplacingOccurrencesOfString(" ", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) phoneFormatter.inputString(textWithoutSpaces) // This is the initial value of the phoneFormatter each time the delegate method is called let formattedNumber: String! if string == "" { formattedNumber = phoneFormatter.removeLastDigit() } else { formattedNumber = phoneFormatter.inputDigit(string) } // set the textField text with the new formattedNumber textField.text = formattedNumber return false } return true } 

这样,它就像苹果的联络版机制一样。 让我知道这是否帮助你。

这里有一个更新的代码片段(Swift 2.0):

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // Allow up to 18 chars if !(string.characters.count + range.location > 18) { if range.length == 0 { // original text didn't change textField.text = phoneFormatter?.inputDigit(string) } else if range.length == 1 { // user pressed backspace textField.text = phoneFormatter?.removeLastDigit() } else if range.length == textField.text?.characters.count { // text was cleared phoneFormatter?.clear() textField.text = "" } } return false } 

主要的改变是允许用户按下“清除”button或“全选” – >“清除”。

有一些边缘情况下,如用户编辑电话号码中的特定数字,这是不能处理,但可以很容易地添加。

您可以在inputhttps://github.com/luximetr/AnyFormatKit期间使用此库进行格式化input

 let textInputController = TextInputController() let textInput = TextInputField() // or TextInputView or any TextInput textInputController.textInput = textInput // setting textInput let formatter = TextInputFormatter(textPattern: "### (###) ###-##-##", prefix: "+12") textInputController.formatter = formatter // setting formatter 

在这种情况下,TextInputController将在textField或textView中格式化文本。