操作通讯录(AddressBook篇)&通讯录UI(AddressBookUI篇)

 

iOS开发------操作通讯录(AddressBook篇)&通讯录UI(AddressBookUI篇)

iOS

代码GitHub:https://github.com/YRunIntoLove/YAddressBookUIDemo 

修改系统通讯录的方法

两种方法

  1. 通过AddressBook.framework的各种函数来完成对AddressBook的操作。
  2. 通过AddressBookUI.framework中提供的系统UIViewController完成对AddressBook的操作,我们只需要使用这几个控制器,传入相应的参数并实现响应的协议方法就可以完成。

方法看法

以上两种方法,初学者估计不会有人想用第一种,那么个人就来谈谈对这两种方法的看法:

  1. 方法比较繁琐,需要一定量的代码来完成,适合自定义UI布局来完成,相对的比较灵活。
  2. 仅需要弹出系统的控制器,传入相应的参数并实现协议方法,就可以完成对通讯录的操作,代码量较少,但UI会固定成系统通讯录的样式,用法简单但布局不灵活。



通过AddressBook.framework实现

实例化对象

实例化一个需要添加的Person属性,当然,如果是修改,那么就获取该属性喽,怎么获取可是上一篇博文介绍的呢

<code class="language-Objective-C hljs php has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化一个Person数据</span>
ABRecordRef person = ABPersonCreate();

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//这里因为没有addressBook属性,所以需要创建一个</span>
ABAddressBookRef addressBook = ABAddressBookCreate();

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化一个CFErrorRef属性,如果实例化,下面的设置为NULL即可</span>
CFErrorRef error = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">NULL</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>


修改联系人属性的方法

<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
*   新增或修改(覆盖原值的过程)ABRecordRef中某个属性的方法
*   
*   record   新增或修改属性的person实例
*   property 属性的key值,比如kABPersonFirstNameProperty..
*/</span>
bool ABRecordSetValue(ABRecordRef record, ABPropertyID property, CFTypeRef value, CFErrorRef* error);


<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
*   删除ABRecordRef中某个属性的方法
*   
*   record   删除属性的person实例
*   property 属性的key值,比如kABPersonFirstNameProperty..
*/</span>
bool ABRecordRemoveValue(ABRecordRef record, ABPropertyID property, CFErrorRef* error);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>


修改通讯录的方法

<code class="language-Objective-C hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加联系人的方法</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ABAddressBookAddRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* error);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//删除联系人的方法</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ABAddressBookRemoveRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* erro);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


修改完毕

<code class="language-Objective-C hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加联系人</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (ABAddressBookAddRecord(addressBook, person, &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>) == true)
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//成功就需要保存一下</span>
    ABAddressBookSave(addressBook, &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>);
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//不要忘记了释放资源</span>
CFRelease(person);
CFRelease(addressBook);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>


具体实例

添加联系人的姓名属性

<code class="language-Objective-C hljs scss has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人姓名属性*/</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Wen"</span>, &error);</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Yue"</span>, &error);</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//姓氏</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonMiddleNameProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"YW"</span>, &error);</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字中的信仰名称(比如Jane·K·Frank中的K</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonPrefixProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"W"</span>, &error);</span>             <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字前缀</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonSuffixProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Y"</span>, &error);</span>             <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字后缀</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonNicknameProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, &error);</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字昵称</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonFirstNamePhoneticProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Wen"</span>, &error);</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//名字的拼音音标</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonLastNamePhoneticProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Yue"</span>, &error);</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//姓氏的拼音音标</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonMiddleNamePhoneticProperty,(__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Y"</span>, &error);</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//英文信仰缩写字母的拼音音标</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>


添加联系人类型属性

<code class="language-Objective-C hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人类型属性*/</span>
ABRecordSetValue(person, kABPersonKindProperty, kABPersonKindPerson, &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>);      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置为个人类型</span>
ABRecordSetValue(person, kABPersonKindProperty, kABPersonKindOrganization, &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置为公司类型</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>


添加联系人头像属性

<code class="language-Objective-C hljs scss has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人头像属性*/</span>
<span class="hljs-function" style="box-sizing: border-box;">ABPersonSetImageData(person, (__bridge CFDataRef)</span>(<span class="hljs-function" style="box-sizing: border-box;">UIImagePNGRepresentation([UIImage imageNamed:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>])</span>),&error);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置联系人头像</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>


添加联系人电话信息

<code class="language-Objective-C hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人电话信息*/</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化一个多值属性</span>
ABMultiValueRef phoneMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置相关标志位,也可以不设置,下面的方法写NULL即可</span>
ABMultiValueIdentifier MobileIdentifier;    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//手机</span>
ABMultiValueIdentifier iPhoneIdentifier;    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//iPhone</span>
ABMultiValueIdentifier MainIdentifier;      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//主要</span>
ABMultiValueIdentifier HomeFAXIdentifier;   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//家中传真</span>
ABMultiValueIdentifier WorkFAXIdentifier;   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//工作传真</span>
ABMultiValueIdentifier OtherFAXIdentifier;  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//其他传真</span>
ABMultiValueIdentifier PagerIdentifier;     <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//传呼</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置相关数值</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551211"</span>, kABPersonPhoneMobileLabel, &MobileIdentifier);    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//手机</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551212"</span>, kABPersonPhoneIPhoneLabel, &iPhoneIdentifier);    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//iPhone</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551213"</span>, kABPersonPhoneMainLabel, &MainIdentifier);        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//主要</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551214"</span>, kABPersonPhoneHomeFAXLabel, &HomeFAXIdentifier);  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//家中传真</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551215"</span>, kABPersonPhoneWorkFAXLabel, &WorkFAXIdentifier);  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//工作传真</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551216"</span>, kABPersonPhoneOtherFAXLabel, &OtherFAXIdentifier);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//其他传真</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"5551217"</span>, kABPersonPhonePagerLabel, &PagerIdentifier);      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//传呼</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//自定义标签</span>
ABMultiValueAddValueAndLabel(phoneMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"55512118"</span>, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"自定义"</span>, &PagerIdentifier);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//自定义标签</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加属性</span>
ABRecordSetValue(person, kABPersonPhoneProperty, phoneMultiValue, &error);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//释放资源</span>
CFRelease(phoneMultiValue);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>


添加联系人的工作信息

<code class="language-Objective-C hljs scss has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人的工作信息*/</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonOrganizationProperty, (__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"OYue"</span>, &error);</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//公司(组织)名称</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonDepartmentProperty, (__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"DYue"</span>, &error);</span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//部门</span>
<span class="hljs-function" style="box-sizing: border-box;">ABRecordSetValue(person, kABPersonJobTitleProperty, (__bridge CFStringRef)</span><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"JYue"</span>, &error);</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//职位</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>


添加联系人的邮件信息

<code class="language-Objective-C hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人的邮件信息*/</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化多值属性</span>
ABMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置相关标志位</span>
ABMultiValueIdentifier QQIdentifier;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//QQ</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//进行赋值</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置自定义的标签以及值</span>
ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"77xxxxx48@qq.com"</span>, (__bridge CFStringRef)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"QQ"</span>, &QQIdentifier);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加属性</span>
ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, &error);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//释放资源</span>
CFRelease(emailMultiValue);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>


添加联系人的地址信息

<code class="language-Objective-C hljs php has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*添加联系人的地址信息*/</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化多值属性</span>
ABMultiValueRef addressMultiValue = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置相关标志位</span>
ABMultiValueIdentifier AddressIdentifier;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化字典属性</span>
CFMutableDictionaryRef addressDictionaryRef = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">NULL</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">NULL</span>);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//进行添加</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressCountryKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"China"</span>);      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//国家</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressCityKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"WeiFang"</span>);       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//城市</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressStateKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ShangDong"</span>);    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//省(区)</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressStreetKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Street"</span>);      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//街道</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressZIPKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"261500"</span>);         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//邮编</span>
CFDictionaryAddValue(addressDictionaryRef, kABPersonAddressCountryCodeKey, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ISO"</span>);    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//ISO国家编码</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加属性</span>
ABMultiValueAddValueAndLabel(addressMultiValue, addressDictionaryRef, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"主要"</span>, &AddressIdentifier);
ABRecordSetValue(person, kABPersonAddressProperty, addressMultiValue, &error);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//释放资源</span>
CFRelease(addressMultiValue);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li></ul>


添加联系人的生日信息

<code class="language-Objective-C hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加公历生日</span>
ABRecordSetValue(person, kABPersonBirthdayProperty, (__bridge CFTypeRef)([NSDate <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">date</span>]), &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

常用的属性如上,其他的属性在此也就不多余了,就是一堆代码的重复,但所有的用法在上面的实例中也都已经给出,只需按照方法用即可。


通过AddressBookUI.framwork实现

ABNewPersonViewController(添加联系人控制器)

顾名思义,它就是用来新增加联系人的控制器,样式就是系统通讯录下的样式,如下: 

这里重点的介绍一下它的协议方法,感觉最管用的也就是这个协议方法<ABNewPersonViewControllerDelegate>:

<code class="language-Objective- C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  新增联系人点击Cancel或者Done之后的回调方法
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> newPersonView 调用该方法的ABNewPersonViewController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person        传出的ABRecordRef属性
 *                       点击了Done,person就是新增的联系人属性
 *                       点击了Cancel,person就是NULL
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)newPersonViewController:(ABNewPersonViewController *)newPersonView
       didCompleteWithNewPerson:(nullable ABRecordRef)person;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

楼主程序的实例

<code class="language-Objective-C hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma mark - <ABNewPersonViewControllerDelegate></span>

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(nullable ABRecordRef)person
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//表示取消了</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (person == <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">NULL</span>){
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Cancle coding..</span>
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//表示保存成功</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Cancle Done..</span>
       [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> requestContacts];
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//不管成功与否,都需要跳回,因为我是通过模态跳入,所以需要dismiss</span>
    [newPersonView dismissViewControllerAnimated:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span> completion:^{}];
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>


ABUnknownPersonViewController(未知联系人的控制器)

这个控制器刚开始接触的时候,完全有点不懂它的用处,明明有了ABNewPersonViewController,怎么还需要这个,后来发现,它还是有他的作用的,这里先不给大家看图,先看一下初始化的代码:

<code class="language-Objective-C hljs php has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//实例化一个person</span>
ABRecordRef person = ABPersonCreate();

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置姓名</span>
ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFStringRef)@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"firstName"</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">NULL</span>);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化未知联系人的控制器</span>
ABUnknownPersonViewController * unknowPersonViewController = [[ABUnknownPersonViewController alloc]init];

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置代理</span>
unknowPersonViewController.unknownPersonViewDelegate = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置相关属性</span>
unknowPersonViewController.alternateName = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alternateName"</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//替代名和姓的替代符</span>
unknowPersonViewController.displayedPerson = person;        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//展示的person对象</span>
unknowPersonViewController.message = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"message"</span>;            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//存在替代符下面的信息</span>
unknowPersonViewController.allowsActions = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否允许作用(出现共享联系人等)</span>
unknowPersonViewController.allowsAddingToAddressBook = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否允许添加到通讯录(新建或添加到现有联系人)</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//释放资源</span>
CFRelease(person);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//push..</span>
[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.navigationController pushViewController:unknowPersonViewController animated:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>];</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li></ul>

初始化代码如上,那么再来看一下效果图,从下图来看,它不只能够新增联系人,还可以补充现有的联系人:


最后介绍一下他的协议方法,说实话,他的协议方法通过文档看懂了,但是用起来很奇怪,来看一下它的协议<ABUnknownPersonViewControllerDelegate>

<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  当创建新的联系人或者更新到已存在的联系人时调用的方法
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> unknownCardViewController 调用方法的ABUnknownPersonViewController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person                    创建或者更新的ABRecordRef属性
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)unknownPersonViewController:(ABUnknownPersonViewController *)unknownCardViewController
                 didResolveToPerson:(nullable ABRecordRef)person;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//根据页面选择的属性进行响应判断,与下面的ABPersonViewController协议方法相似</span>
- (BOOL)unknownPersonViewController:(ABUnknownPersonViewController *)personViewController
shouldPerformDefaultActionForPerson:(ABRecordRef)person
                           property:(ABPropertyID)property
                         identifier:(ABMultiValueIdentifier)identifier;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>


ABPersonViewController(详细信息的控制器)

这个控制器主要是用来显示联系人详细信息,不仅如此,还可以对联系人进行编辑,先上图来看看他的样式 

它的的可设置属性如下:

<code class="language-Objective-C hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//展示详情的Person</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>,readwrite) ABRecordRef displayedPerson;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否允许编辑,如果设置为false,右上角的Edit按钮就会消失,默认为true</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span> allowsEditing;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否允许响应,如果设置为false,下面"发送信息,共享联系人"选项就会消失,默认为true</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span> allowsActions;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//固定展示属性的key数组,只作用于浏览时,比如只想展示姓名,如果进入编辑状态,那么还是会全部展示出来</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>,copy,nullable) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span><<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNumber</span>*> *displayedProperties;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否显示链接人,默认为false</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span> shouldShowLinkedPeople;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置属性的高亮项,如果属性值是单一的,后面的多值标识符将会被忽略</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)setHighlightedItemForProperty:(ABPropertyID)property
                       withIdentifier:(ABMultiValueIdentifier)identifier;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>


协议方法<ABPersonViewControllerDelegate>

<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  根据页面选择的属性进行响应判断
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> personViewController 进行回调的ABPersonViewController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person               展示的Person
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> property             进行响应的属性
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> identifier           如果是多值属性,返回多值属性
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> 是否响应,true为按照系统默认方式响应,false为不响应
 */</span>
- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person
                    property:(ABPropertyID)property
                  identifier:(ABMultiValueIdentifier)identifier;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>

下面是楼主的协议实例:

<code class="language-Objective-C hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">- (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span>)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person
                    property:(ABPropertyID)property
                  identifier:(ABMultiValueIdentifier)identifier
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果点击的是电话选项,不进行响应,就是在真机中,点击电话cell,不会相应拨打电话</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (property == kABPersonPhoneProperty)
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>;
    }

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>


ABPeoplePickerNavigationController(选择联系人的控制器)

是顾名思义的一个选择控制器,因为是导航控制器,所以这里我选择的使用模态跳,直接来看看效果图吧: 

它的协议方法如下<ABPeoplePickerNavigationControllerDelegate>(备注:楼主用的Xcode版本号为7.3.1,并且没有下载iOS7.0的模拟环境,所以只能走iOS8.0之后的协议方法)

<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  点击Cancle进行的回调
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> peoplePicker 进行回调的ABPeoplePickerNavigationController
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker;
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//模态弹回</span>
    [peoplePicker dismissViewControllerAnimated:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span> completion:^{}];
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>
<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  选择了联系人之后进行何种操作的回调(iOS8.0之后由下面的方法替代)
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> peoplePicker 进行回调的ABPeoplePickerNavigationController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person       选择的Person
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> true表示能够显示通讯录并dismiss掉选择器,false表示不做任何事
 */</span>
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person NS_DEPRECATED_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>_0, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0)
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;
}


<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  选择了联系人之后进行的回调(替代上面协议方法的方法,在iOS8.0之后可用)
 *
 *  或者用属性predicateForSelectionOfPerson来替代
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> peoplePicker 进行回调的ABPeoplePickerNavigationController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person       选择的Person
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker
                         didSelectPerson:(ABRecordRef)person
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//coding record the person</span>

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//dismiss掉选择器</span>
    [peoplePicker dismissViewControllerAnimated:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span> completion:^{}];

}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li></ul>
<code class="language-Objective-C hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  选择了联系人之后选择属性时进行何种操作的回调(iOS8.0之后用下面的方法替代)
 *
 * (peoplePickerNavigationController:shouldContinueAfterSelectingPerson: 的详细版)
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> peoplePicker 进行回调的ABPeoplePickerNavigationController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person       选择的person对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> property     选择的属性
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> identifier   如果是多值,传出多值属性,单值属性时可以忽略
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> true表示进行系统的默认操作并dismiss出选择器,false表示在当前选择器显示该联系人
 */</span>
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier NS_DEPRECATED_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>_0,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0)
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;
}




<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  选择了联系人之后选择属性时进行何种操作的回调(替代上面协议方法的方法,在iOS8.0之后可用)
 *
 *  或者用属性predicateForSelectionOfProperty来替代
 *
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> peoplePicker 进行回调的ABPeoplePickerNavigationController对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> person       选择的person对象
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> property     选择的属性
 * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> identifier   如果是多值,传出多值属性,单值属性时可以忽略
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker
                         didSelectPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//跳回</span>
    [peoplePicker dismissViewControllerAnimated:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span> completion:^{}];
}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li></ul>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值