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

本文介绍了如何使用AddressBook.framework和AddressBookUI.framework来修改iOS系统的通讯录。通过实例详细讲解了添加、修改联系人属性,包括姓名、类型、头像、电话、工作信息、邮件、地址和生日等。同时,对比了两种方法的优缺点,提供了使用ABNewPersonViewController、ABUnknownPersonViewController、ABPersonViewController和ABPeoplePickerNavigationController的协议方法和实践示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇博文简要的介绍了如何使用AddessBook.framework来获取系统通讯录,但有时候又想对其做修改怎么办,那么这篇博文就总结一下如何修改系统的通讯录吧。

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

修改系统通讯录的方法

两种方法

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

方法看法

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

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



通过AddressBook.framework实现

实例化对象

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

//实例化一个Person数据
ABRecordRef person = ABPersonCreate();

//这里因为没有addressBook属性,所以需要创建一个
ABAddressBookRef addressBook = ABAddressBookCreate();

//实例化一个CFErrorRef属性,如果实例化,下面的设置为NULL即可
CFErrorRef error = NULL;


修改联系人属性的方法

/**
*   新增或修改(覆盖原值的过程)ABRecordRef中某个属性的方法
*   
*   record   新增或修改属性的person实例
*   property 属性的key值,比如kABPersonFirstNameProperty..
*/
bool ABRecordSetValue(ABRecordRef record, ABPropertyID property, CFTypeRef value, CFErrorRef* error);


/**
*   删除ABRecordRef中某个属性的方法
*   
*   record   删除属性的person实例
*   property 属性的key值,比如kABPersonFirstNameProperty..
*/
bool ABRecordRemoveValue(ABRecordRef record, ABPropertyID property, CFErrorRef* error);


修改通讯录的方法


//添加联系人的方法
bool ABAddressBookAddRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* error);

//删除联系人的方法
bool ABAddressBookRemoveRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* erro);


修改完毕

//添加联系人
if (ABAddressBookAddRecord(addressBook, person, &error) == true)
{
    //成功就需要保存一下
    ABAddressBookSave(addressBook, &error);
}

//不要忘记了释放资源
CFRelease(person);
CFRelease(addressBook);


具体实例

添加联系人的姓名属性


/*添加联系人姓名属性*/
ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFStringRef)@"Wen", &error);       //名字
ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge CFStringRef)@"Yue", &error);        //姓氏
ABRecordSetValue(person, kABPersonMiddleNameProperty,(__bridge CFStringRef)@"YW", &error);        //名字中的信仰名称(比如Jane·K·Frank中的K
ABRecordSetValue(person, kABPersonPrefixProperty,(__bridge CFStringRef)@"W", &error);             //名字前缀
ABRecordSetValue(person, kABPersonSuffixProperty,(__bridge CFStringRef)@"Y", &error);             //名字后缀
ABRecordSetValue(person, kABPersonNicknameProperty,(__bridge CFStringRef)@"", &error);            //名字昵称
ABRecordSetValue(person, kABPersonFirstNamePhoneticProperty,(__bridge CFStringRef)@"Wen", &error);//名字的拼音音标
ABRecordSetValue(person, kABPersonLastNamePhoneticProperty,(__bridge CFStringRef)@"Yue", &error); //姓氏的拼音音标
ABRecordSetValue(person, kABPersonMiddleNamePhoneticProperty,(__bridge CFStringRef)@"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值