Address Book主要是用于获取用户通讯录信息。有关的framework主要是Address Book UI和Address Book。
以下将先通过几个例子对其进行介绍,再进行查漏补缺。
先来做个快速了解,创建一个简单app,选取用户通讯录中某个人,并显示其姓名及电话。
1、创建工程,导入Address Book UI、Address Book frameworks.
2、打开storyboard,添加一个button和两个labels
功能:点击button,跳转到通讯录,选取某人,显示其firstName和phoneNumber。
3、链接button、labels和view controller
FPViewController.h
//
// FPViewController.h
// Address Book
//
// Created by Emma on 15/5/21.
// Copyright (c) 2015年 Emma. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <AddressBookUI/AddressBookUI.h>
@interface FPViewController : UIViewController<ABPeoplePickerNavigationControllerDelegate>
//labels
@property (weak, nonatomic) IBOutlet UILabel *fristName;
@property (weak, nonatomic) IBOutlet UILabel *phoneNumber;
//button Action
- (IBAction)showPicker:(id)sender;
@end
注意添加ABPeoplePickerNavigationControllerDelegate协议。
4、button动作的实现
#pragma mark - Action
//打开通讯录
- (IBAction)showPicker:(id)sender
{
//通讯录controller
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
//显示通讯录
[self presentViewController:picker animated:YES completion:nil];
}
5、在delegate中实现对用户动作的回应
//当点击cancel时触发
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissViewControllerAnimated:YES completion:nil];
}
//iOS8接口更新
//Called after a person has been selected by the user.当某人被用户选中时触发,iOS8新接口
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
{
[self displayPerson:person];
[self dismissViewControllerAnimated:YES completion:nil];
}
//iOS8前接口
//Sent when the user selects a contact.当某人被用户选中时触发,iOS8前接口
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
[self displayPerson:person];
[self dismissViewControllerAnimated:YES completion:nil];
return NO;
}
//Sent when the user selects one of a person’s properties.当用户选取了某人的某一属性时触发
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
return NO;
}
//显示被选中人得信息
- (void)displayPerson:(ABRecordRef)person
{
//_bridge_transfer将Core Foundation框架数据类型对象转换为Foundation框架数据类型对象,且将对象的所有权交给ARC管理
//显示名字,property为kABPersonFirstNameProperty
NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
self.fristName.text = name;
//显示号码,property为kABPersonPhoneProperty
NSString* phone = nil;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
//选取首个号码
if (ABMultiValueGetCount(phoneNumbers) > 0)
{
phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
}
else
{
phone = @"[NONE]";
}
self.phoneNumber.text = phone;
CFRelease(phoneNumbers);
}
参考:
apple官方文档Address Book_Quick Start Tutorial.
Address Book部分所有文章:
Address Book部分完整工程: