AddressBook

原创 2015年11月17日 20:47:20
在Build Phases的Link Binary With Libraries中加两个框架ContactsUI.framework 和 Contacts.framework

Main.storyboard

#import "ViewController.h"
#import <ContactsUI/CNContactViewController.h>
#import <ContactsUI/CNContactPickerViewController.h>

@interface ViewController ()<CNContactViewControllerDelegate, CNContactPickerDelegate>

- (IBAction)newContact:(UIButton *)sender;
- (IBAction)currentContact:(UIButton *)sender;
//CNContactStore    是一个用来读取和保存联系人的新的类
@property(nonatomic, strong)CNContactStore *contactStore;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//      创建新的联系人
- (IBAction)newContact:(UIButton *)sender {
    [self saveNewContact];
}

- (IBAction)currentContact:(UIButton *)sender {
    [self saveExistContact];
}

//      保存新的联系人
- (void)saveNewContact{

    //      这个对象是用来配置联系人信息的,有可变的CNMutaleContact和CNContact,区别用来读取和创建联系人。CNContact对象中有许多属性,对应联系人的一些信息


    //  1.  创建Contact对象, 必须是可变的
    CNMutableContact *contact = [[CNMutableContact alloc] init];
    //  2.  创建新建好友页面
    CNContactViewController *controller = [CNContactViewController viewControllerForNewContact:contact];

    //  3.  代理内容根据自己需要实现
    controller.delegate = self;
    //  4.  跳转
    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:controller];

    [self presentViewController:navigation animated:YES completion:^{
        //  5.  为contact赋值
        //      设置联系人头像
        contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@""]);
        //      设置联系人的昵称
        contact.nickname = @"";
        //      设置联系人名字
        contact.givenName = @"";
        //      设置联系人姓氏
        contact.familyName = @"";
        //      设置联系人邮箱(邮箱信息有多种, 可以任意选择, 点击类查看CNLabeledValue)
        CNLabeledValue *email = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@""];
        contact.emailAddresses = @[email];
        //      设置联系人电话号(电话信息有多种, 可以任意选择, 点击类查看CNPhoneNumber)
        //      电话号码, 可以通过CNPhoneNumber的+号类方法创建, 或者用初始化方法创建
        contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@""]]];
        //      设置联系人地址
        //      点击CNMutablePostalAddress查看设置地址详细信息
        CNMutablePostalAddress *address = [[CNMutablePostalAddress alloc] init];
        address.state = @"中国";
        //      设置生日
        NSDateComponents *birthday = [[NSDateComponents alloc] init];
        contact.birthday = birthday;
        //      创建添加联系人请求CNSaveRequest
        CNSaveRequest *save = [[CNSaveRequest alloc] init];
        //      添加联系人
        [save addContact:contact toContainerWithIdentifier:nil];
        //      写入联系人CNContactStore
        CNContactStore *store = [[CNContactStore alloc] init];
        [store executeSaveRequest:save error:nil];
    }];



/*
        //添加一个联系人
        - (void)addContact:(CNMutableContact *)contact toContainerWithIdentifier:(nullable NSString *)identifier;

        //更新一个联系人
        - (void)updateContact:(CNMutableContact *)contact;
        //删除一个联系人
        - (void)deleteContact:(CNMutableContact *)contact;
        //添加一组联系人
        - (void)addGroup:(CNMutableGroup *)group toContainerWithIdentifier:(nullable NSString *)identifier;
        //更新一组联系人
        - (void)updateGroup:(CNMutableGroup *)group;
        //删除一组联系人
        - (void)deleteGroup:(CNMutableGroup *)group;
        //向组中添加子组
        - (void)addSubgroup:(CNGroup *)subgroup toGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
        //在组中删除子组
        - (void)removeSubgroup:(CNGroup *)subgroup fromGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
        //向组中添加成员
        - (void)addMember:(CNContact *)contact toGroup:(CNGroup *)group;
        //向组中移除成员
        - (void)removeMember:(CNContact *)contact fromGroup:(CNGroup *)group;

*/
}

- (void)saveExistContact{
    //1.跳转到联系人选择页面,注意这里没有使用UINavigationController
    CNContactPickerViewController *controller = [[CNContactPickerViewController alloc] init];

    controller.delegate = self;

    [self presentViewController:controller animated:YES completion:^{

    }];
}


#pragma mark - CNContactViewControllerDelegate
- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(nullable CNContact *)contact{
    [viewController dismissViewControllerAnimated:YES completion:^{

    }];
}

#pragma mark - CNContactPickerDelegate
//2.实现点选的代理,其他代理方法根据自己需求实现
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
    [picker dismissViewControllerAnimated:YES completion:^{
        //3.copy一份可写的Contact对象,不要尝试alloc一类,mutableCopy独此一家
        CNMutableContact *c = [contact mutableCopy];
        //4.为contact赋值
        [self setValue4Contact:c existContect:YES];
        //5.跳转到新建联系人页面
        CNContactViewController *controller = [CNContactViewController viewControllerForNewContact:c];
        controller.delegate = self;
        UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:controller];
        [self presentViewController:navigation animated:YES completion:^{
        }];
    }];
}


//设置要保存的contact对象
- (void)setValue4Contact:(CNMutableContact *)contact existContect:(BOOL)exist{
            //      ContactFramework获取格式化的联系人姓名
            NSString *strName = [CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName];
            NSLog(@"%@", strName);

//    if (!exist) {
//        //名字和头像
//        contact.nickname = @"oriccheng";
//        //        UIImage *logo = [UIImage imageNamed:@"..."];
//        //        NSData *dataRef = UIImagePNGRepresentation(logo);
//        //        contact.imageData = dataRef;
//    }
//    //电话,每一个CNLabeledValue都是有讲究的,如何批评,可以在头文件里面查找,这里给出几个常用的,别的我也不愿意去研究
//    CNLabeledValue *phoneNumber = [CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberMobile value:[CNPhoneNumber phoneNumberWithStringValue:@"18888888888"]];
//    if (!exist) {
//        contact.phoneNumbers = @[phoneNumber];
//    }
//    //现有联系人情况
//    else{
//        if ([contact.phoneNumbers count] >0) {
//            NSMutableArray *phoneNumbers = [[NSMutableArray alloc] initWithArray:contact.phoneNumbers];
//            [phoneNumbers addObject:phoneNumber];
//            contact.phoneNumbers = phoneNumbers;
//        }else{
//            contact.phoneNumbers = @[phoneNumber];
//        }
//    }
//    
//    //网址:CNLabeledValue *url = [CNLabeledValue labeledValueWithLabel:@"" value:@""];
//    //邮箱:CNLabeledValue *mail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:self.poiData4Save.mail];
//    
//    //特别说一个地址,PostalAddress对应的才是地址
//    CNMutablePostalAddress *address = [[CNMutablePostalAddress alloc] init];
//    address.state = @"辽宁省";
//    address.city = @"沈阳市";
//    address.postalCode = @"111111";
//    //外国人好像都不强调区的概念,所以和具体地址拼到一起
//    address.street = @"沈河区惠工街10号";
//    //生成的上面地址的CNLabeledValue,其中可以设置类型CNLabelWork等等
//    CNLabeledValue *addressLabel = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:address];
//    if (!exist) {
//        contact.postalAddresses = @[addressLabel];
//    }else{
//        if ([contact.postalAddresses count] >0) {
//            NSMutableArray *addresses = [[NSMutableArray alloc] initWithArray:contact.postalAddresses];
//            [addresses addObject:addressLabel];
//            contact.postalAddresses = addresses;
//        }else{
//            contact.postalAddresses = @[addressLabel];
//        }
//    }
}

@end

关于ios9中得AddressBook和AddressBookUI框架过时问题

ios9的更新后,AddressBook.framework和AddressBookUI.framework几乎是全部过时,其不支持OC。用Contacts.framework和ContactsUI....
  • u011010305
  • u011010305
  • 2015年10月06日 16:45
  • 1187

iOS开发------获取系统联系人(AddressBook篇)

AddressBook是Apple提供给我们获取系统联系人的一个很方便类库,与其说方便,其实刚开始还是比较崩溃的,从开发文档来看,它还是偏向于C语言,并且不在ARC的控制之下,虽然在iOS9.0之后会...
  • RunIntoLove
  • RunIntoLove
  • 2016年05月11日 11:33
  • 5726

OC试题 ——通讯录(AddressBook)

要求描述:⽤用OC语⾔言完成简易通讯录(实现增删改查)功 能. (注:使⽤用MRC) ⼀一、功能描述: main函数中通过使⽤用Person类和AddressBook类,创建对象、调⽤用⽅方法,实现...
  • OnthewayH
  • OnthewayH
  • 2015年11月18日 10:26
  • 757

AddressBook 电话簿访问与修改

访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参数。管理地址簿中条目的基类对象是 ABRecord。一个 ABRecord 可以表示一个人 或者一个群体 ABG...
  • LIN1986LIN
  • LIN1986LIN
  • 2014年04月10日 15:31
  • 849

AddressBook获取用户信息

- (void)viewDidLoad { [super viewDidLoad]; _table.delegate = self; _table.dataSourc...
  • MinggeQingchun
  • MinggeQingchun
  • 2016年07月02日 20:48
  • 309

手机通讯录AddressBook的使用

一.基本知识 和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问...
  • potato512
  • potato512
  • 2014年07月05日 13:12
  • 385

获取全部通信录信息(AddressBook)

一次性获取全部通讯录的信息,没有UI界面选择联系人 1.先要请求授权 // // AppDelegate.m #import "AppDelegate.h" #import @inter...
  • github_26672553
  • github_26672553
  • 2016年02月07日 21:20
  • 350

AddressBook 代码详解

原文地址:代码详解">AddressBook 代码详解作者:花花猪的代码 为了调用系统的通讯录界面与相应功能,需要引入AddressBook.framework   同时,在源文件中需...
  • a827444781a
  • a827444781a
  • 2014年04月29日 11:24
  • 275

读Qt示例之addressbook(一)

读Qt示例之addressbook(一) 这里看的示例是QT5.6.2的 addressbook 是将联系人按英文字母顺序,3个字母一组显示联系人及其地址的一个示例。 address bo...
  • fsnAltria
  • fsnAltria
  • 2017年07月11日 21:58
  • 100

AddressBook 相关操作小计

为了调用系统的通讯录界面与相应功能,需要引入AddressBook.framework 同时引入两个文件 #import #import 读取手机通讯录 ABA...
  • u010576399
  • u010576399
  • 2016年01月19日 10:46
  • 225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AddressBook
举报原因:
原因补充:

(最多只允许输入30个字)