获取系统通讯录的访问权限及相关信息
首先导入AddressBook.framework
框架
1)获得系统通讯录的实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);// 第一个参数是预留参数
2)获得访问通讯录的权限
ABAddressBookRequestAccessWithCompletion(addressBook, nil); //第二个参数是是否访问成功以及错误信息
3)获得系统通讯录中的所有联系人信息
NSArray *array = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
ABRecordRef record = array[i];//通过此方法来调出每一个联系人信息
NSString * str = ABRecordCopyValue(record, ABPropertyID property); //根据property 来获得具体信息
NSString *allName = (NSString *)ABRecordCopyCompositeName(record);//获取联系人全名
ABPropertyID 有:
// Property keys
AB_EXTERN const ABPropertyID kABPersonFirstNameProperty; // First name - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonLastNameProperty; // Last name - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonMiddleNameProperty; // Middle name - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonPrefixProperty; // Prefix ("Sir" "Duke" "General") - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonSuffixProperty; // Suffix ("Jr." "Sr." "III") - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonNicknameProperty; // Nickname - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonFirstNamePhoneticProperty; // First name Phonetic - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonLastNamePhoneticProperty; // Last name Phonetic - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonMiddleNamePhoneticProperty; // Middle name Phonetic - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonOrganizationProperty; // Company name - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonJobTitleProperty; // Job Title - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonDepartmentProperty; // Department name - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonEmailProperty; // Email(s) - kABMultiStringPropertyType
AB_EXTERN const ABPropertyID kABPersonBirthdayProperty; // Birthday associated with this person - kABDateTimePropertyType
AB_EXTERN const ABPropertyID kABPersonNoteProperty; // Note - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonCreationDateProperty; // Creation Date (when first saved)
AB_EXTERN const ABPropertyID kABPersonModificationDateProperty; // Last saved date
// Addresses
AB_EXTERN const ABPropertyID kABPersonAddressProperty; // Street address - kABMultiDictionaryPropertyType
// Dates
AB_EXTERN const ABPropertyID kABPersonDateProperty; // Dates associated with this person - kABMultiDatePropertyType
// Kind
AB_EXTERN const ABPropertyID kABPersonKindProperty; // Person/Organization - kABIntegerPropertyType
// Phone numbers
AB_EXTERN const ABPropertyID kABPersonPhoneProperty; // Generic phone number - kABMultiStringPropertyType
// IM
AB_EXTERN const ABPropertyID kABPersonInstantMessageProperty; // Instant Messaging - kABMultiDictionaryPropertyType
// URLs
AB_EXTERN const ABPropertyID kABPersonURLProperty; // URL - kABMultiStringPropertyType
// Social Profile
AB_EXTERN const ABPropertyID kABPersonSocialProfileProperty // kABMultiDictionaryPropertyType
获取系统通讯录UI界面以及ABPeoplePickerNavigationControllerDelegate
首先导入AddressBookUI.framework
和AddressBook.framework
两个框架
1.获取系统通讯录的视图控制器实例
ABPeoplePickerNavigationController *abVC = [[ABPeoplePickerNavigationController alloc]init];
abVC.peoplePickerDelegate = self; //设置代理
2.跳转到系统通讯录界面
#pragma mark -- 通讯录的代理方法
//点击取消按钮的时候要响应的方法
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
/***点击取消按钮要进行的相关事件****/
}
//当点击某一个联系人的时候,会调用的方法
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
return YES;// 如果返回yes 则可以进入下一个详细页面
}
//点击联系人某一项信息的时候,会调用的方法
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
// 根据传过来的记录和属性ID 得到当前点击的属性的所有值
ABMultiValueRef multiValue = ABRecordCopyValue(person, property);
// 根据identifier得到唯一的索引
CFIndex index = ABMultiValueGetIndexForIdentifier(multiValue, identifier);
NSString *phone = ABMultiValueCopyValueAtIndex(multiValue, index);
NSLog(@"得到的电话号码=====%@",phone);
return YES;
}