Address​Book​UI

Address Book UI是用来在用户地址簿展示、选择、编辑和创建联系人的iOS框架。与Message UI框架相似,Address Book UI包含了一些可以用dismissViewControllerAnimated:completion:方法来展示的试图控制器,它通过一些统一的接口提供常用的系统功能。

要用到这个框架,你需要添加AddressBook.frameworkAddressBookUI.framework两个框架到你工程中build phase的”Link Binary With Libraries”之下。

乍一看你可能觉得Address Book UI没有什么特别的地方。

其实,在iOS 6里,MFMailComposeViewControllerABNewPersonViewController有一些_非常棒_的内部处理小伎俩在起着作用,Ole Begemann就有一篇很棒的、非常值得读的关于远程视图控制器的文章

抛开剩下的View Controller和协议,Address Book UI还有一个功能十分惊人地有用。

ABCreateStringWithAddressDictionary()函数返回一个已经本地化、结构化的地址字符串组。

关于这个函数第一个要讨论的问题是包含这些组成结构的字典,这个字典是由以下的常量作为键值的。

  • kABPersonAddressStreetKey
  • kABPersonAddressCityKey
  • kABPersonAddressStateKey
  • kABPersonAddressZIPKey
  • kABPersonAddressCountryKey
  • kABPersonAddressCountryCodeKey

kABPersonAddressCountryCodeKey 是一个尤其重要的属性,它决定了用来格式化地址字符串的语言。如果你对国家代码不是很确定或者没有确定的国家代码数据集,你可以通过NSLocale像这样来确定:

[mutableAddressComponents setValue:[[[NSLocale alloc] initWithIdentifier:@"en_US"] objectForKey:NSLocaleCountryCode] forKey:(__bridge NSString *)kABPersonAddressCountryCodeKey];

在其他任何框架里你都找不到实用性这么好的功能,这不需要用到NSLocale,甚至也不需要Map Kit和Core Location来定位。苹果尽了如此多的努力来提高很多本地化的细节,而你会很惊奇这么一个重要的功能被放在了一个模糊不清、感觉上不怎么相关的一个框架里。

不过,电话簿UI在OS X里不提供,似乎这个平台也没有其他相同功能的内容。

你看,地址格式会因为地区的不同相差很大,例如,美国的地址是下面这个格式的:

Street Address
City State ZIP
Country

而日本的地址的表示则有不同的习惯:

Postal Code
Prefecture Municipality
Street Address
Country

这个和不同地区有不同的全角半角逗号一样烦人,所以,你还是在展示结构化的地址的时候尽量多地用这些函数把。

还有一个很棒的利用已经本地化的地址簿的方式就是FormatterKit,他在它的1.1版中添加了TTTAddressFormatter

作者 Mattt
Mattt

Mattt (@mattt) is a writer and developer in Portland, Oregon. He is the founder of NSHipster and Flight School, and the creator of several open source libraries, including AFNetworking and Alamofire.

翻译者
Henry Lee

爱好广泛的 iOS 工程师。

下一篇文章

NSLinguisticTagger在语言学功能上来讲是一把名副其实的瑞士军刀,它可以讲自然语言的字符串标记为单词、确定词性和词根、划分出人名地名和组织名称、告诉你字符串使用的语言和语系。