1.要加两个框架
2.要判断一下通讯录是否可以访问
@interface WFTViewController ()
@property (nonatomic, assign) ABAddressBookRef addressBook;
@property (nonatomic,assign) int mark;//标记是否可以访问通讯录
@end
@implementation WFTViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
[self checkAddressBookAccess];
}
#pragma mark -
#pragma mark Address Book Access
-(void)checkAddressBookAccess
{
switch (ABAddressBookGetAuthorizationStatus())
{
//用户如允许访问通讯录
case kABAuthorizationStatusAuthorized:
_mark=1;
break;
//用户没有明确的答案
case kABAuthorizationStatusNotDetermined :
[self requestAddressBookAccess];
break;
//用户不允许访问通讯录
case kABAuthorizationStatusDenied:
case kABAuthorizationStatusRestricted:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告"
message:@"不允许访问通讯录."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
break;
default:
break;
}
}
3.如果用户没有明确答复许调用
//提示用户 访问他们的地址簿数据
-(void)requestAddressBookAccess
{
ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error)
{
if (granted)
{
dispatch_async(dispatch_get_main_queue(), ^{
_mark=1;
});
}
});
}
4.调用通讯录
//一个按钮得响应函数
- (IBAction)ok:(UIButton *)sender {
if (_mark==1) {
[self showPeoplePickerController];
}
}
-(void)showPeoplePickerController
{
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
// Display only a person's phone, email, and birthdate
NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonPhoneProperty],
[NSNumber numberWithInt:kABPersonEmailProperty],
[NSNumber numberWithInt:kABPersonBirthdayProperty], nil];
picker.displayedProperties = displayedItems;
[self presentViewController:picker animated:YES completion:nil];
}
#pragma mark ABPeoplePickerNavigationControllerDelegate
// 显示选择的人的信息
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
return YES;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
//取得 联系人姓名
NSString *name = (__bridge NSString*)ABRecordCopyCompositeName(person);
//取得 联系人手机号
ABMultiValueRef phoneProperty = ABRecordCopyValue(person,kABPersonPhoneProperty);
int idx = ABMultiValueGetIndexForIdentifier (phoneProperty, identifier);
NSString *phone = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,idx);
NSLog(@"%@ %@",name,phone);
//不允许拨打电话
return NO;
}
//选择取消
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker;
{
[self dismissViewControllerAnimated:YES completion:NULL];
}
代码是修改截取的官方得demo,取得联系人姓名,手机号的方法来自网络