Formatting Phone Numbers on an iPhone

With my Corporate Directory CapStone project I found myself needing to format a phone number in phone fields like cell phone, home phone, office phone, etc.  I was surprised to find this is not as easy on an iPhone as you may think.  Even though clearly Apple has this functionality in Contacts they have no Public API for phone formatting.  You may think what’s the big deal anyhow. Well, in the US you could have a leading 1 or not and you want to be consistent with area code segmentation and then there are international numbers.  I started looking on stackoverflow but thought there ought to be a better way than implementing my own NSFormatter.After looking around I found a good GitHub project by Willy Shark, A.K.A. Serheo Shatunov, called SHSPhoneComponent.  The good news is it also has a CocoaPod.

In this post I’ll outline how to integrate this CocoaPod into your project.

1. First, update your Podfile with the below and do a pod update:

pod 'SHSPhoneComponent', '~> 1.4'

2. Then in your Storyboard or Nib file create a UITextFiled for the phone number to be formatted.  I was using UILabels which do not work as these are UITextField and NSFormatter subclasses for formatting phone numbers. Connect your UITextField(s) to the proper View’s Outlet(s). Since we are using a custom class we need to make the @property of the phone labels look something like:

@property (weak, nonatomic) IBOutlet SHSPhoneTextField *thePhoneNumberToFormat;

Then using the Identity Inspector set the custom class of the UITextField to this SHSPhoneTextField.

3. In your View’s include the following libraries:

#include <SHSPhoneLibrary.h>;
#include <SHSPhoneNumberFormatter.h>;

4. In your View’s ViewDidLoad method

[self.thePhoneNumberToFormat.formatter setDefaultOutputPattern:@"+# (###) ###-####"];
[self.thePhoneNumberToFormat.formatter addOutputPattern:@"+1 (###) ###-####" forRegExp:@"^\\d{10}$" imagePath:nil];
[self.thePhoneNumberToFormat setFormattedText:self.thePhoneNumberFromCoreDate];

One thing to note is that in line 2 above the addOutputPattern: requires a regular expression in order to have a pattern to match. One site I found which helped me test my regex with my data was a regular expression calculator at rubular.

2 thoughts on “Formatting Phone Numbers on an iPhone

  1. Pingback: New Radar | [[Cocoa alloc] init];

  2. Pingback: Formatting Phone Numbers on an iPhone « FlatIron School

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s