2016-09-02 1 views
3

Ich möchte in der Lage sein, eine Telefonnummer in einer Standardweise, z. nur die Ziffern (möglicherweise mit dem ‚+‘ für den Ländercode), so etwas wie diese Beispiele ...Kann ich iOS9 Contacts Framework verwenden, um eine formatierte Telefonnummer zu erhalten?

"17185555555" 
"+17185555555" 
"+447788888888" 

... aber ich möchte in der Lage sein, in einem gut zu einem Benutzer angezeigt formatierte Weise, z

"1 (718) 555-5555" 
"+1 (718) 555-5555" 
"+44 (7788) 888888" 

... ohne auf einen CNContactViewController zum Formatieren angewiesen zu sein.

Offensichtlich tun dies nur für US/Kanada Zahlen wäre einfach - es ist nur ein Standardformat - aber ich möchte es generisch sein, so dass es für Zahlen aus jedem Land funktionieren kann. Ich weiß, this Frage gibt eine Antwort nur für US/Can-Nummern.

Ich weiß, dass ich einen CNContactViewController verwenden könnte, um die Nummer im richtigen Format anzuzeigen, z.

let newContact = CNMutableContact() 
newContact.givenName = "John" 
newContact.familyName = "Smith" 
newContact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberiPhone, value: CNPhoneNumber(stringValue:"17185555555"))] 
let contactView = CNContactViewController(forContact: newContact) 
self.presentViewController(contactView, animated: true, completion: nil) 

Diese die Zahl auf dem Bildschirm formatiert richtig zeigen wird, das heißt

1 (718) 555-5555 

... so weiß ich, dass etwas im Rahmen kann es tun. (Dieser Ansatz funktioniert für andere Länderrufnummernformate, solange Sie der Nummer den richtigen Ländercode voranstellen - zB "+44 ...")

Von various other questions Ich weiß, dass ich die rohen Ziffern und Land bekommen kann Code aus einem CNContact, z (In Anlehnung an obigem Beispiel)

for pNumber: CNLabeledValue in newContact.phoneNumbers { 
    let value = pNumber.value as! CNPhoneNumber 
    let cc = value.valueForKey("countryCode") as? String 
    let digits = value.valueForKey("digits") as? String 
    print("cc:" + cc + ", " + digits) 
} 

... aber dies zeigt nur die unformatierte Zeichenfolge wieder - nicht das, was ich in diesem Fall suchen.

Jede Hilfe oder andere empfohlene Ansätze wirklich geschätzt!

+0

scheint ein Duplikat zu sein von http://stackoverflow.com/questions/6052966/phone-number-formatting – matt

+0

ich diese Frage sah (und wird verlinkt auf es jetzt), aber ich glaube, ich habe recht, wenn ich sage, dass das nur für US/Can Zahlen funktioniert, was ich nicht suche. – nickpharris

+0

Ich weiß nicht, was Sie mit "das" meinen. Es gibt Antworten dort, die genau zeigen, was es dauern würde, um einen Gebietsschema-bewussten Telefonformatierer zur Verfügung zu stellen. – matt

Antwort

1

Meine Antwort schlägt eine andere lib

Sie können mit this lib Ihre Zahlen formatiert werden.

Und Sie können wie folgt verwenden:

let phoneNumber: NBPhoneNumber = try phoneUtil.parse("17185555555", defaultRegion: yourRegion) 
let formattedString: String = try phoneUtil.format(phoneNumber, numberFormat: .E164) 
+1

Funktioniert gut - danke. Wahrscheinlich besser, als sich auf das Contacts Framework zu verlassen! – nickpharris

Verwandte Themen