联系人UI,联系人框架并在Objective-C中创建VCard(VCF)

从iOS 9+版本开始,不推荐使用AddressBookUI.framework和Addressbook.framework。 Apple引入了ContactUI.framework和Contact.framework,并且对AddressBookUI.framework和Addressbook.framework进行了增强。 在此博客中,我们将讨论如何使用这两个新框架以及如何导出VCard。 让我们开始从电话联系人中选择联系人并访问该人的基本信息。

步骤1.创建新的Xcode项目名称“ ContactDemo”,并导入Contacts.framework和ContactsUI.framework,如图所示。

步骤2.在项目中添加Button,ImageView和3个标签,如图所示:

步骤3.在相应的视图控制器中创建按钮动作,imageview和标签的出口,如下所示:

@属性(弱,非原子)IBOutlet UIImageView * personImage;
@属性(弱,非原子)IBOutlet UILabel * personName;
@属性(弱,非原子)IBOutlet UILabel * emailId;
@属性(弱,非原子)IBOutlet UILabel * phoneNo;

–(IBAction)selectAction:(id)发送者;

步骤4.将委托“ CNContactPickerDelegate”添加到viewcontroller。

步骤5.添加委托方法:

–(无效)contactPicker:(CNContactPickerViewController *)picker
didSelectContact:(CNContact *)contact {
[自己的getContactDetails:contact];
}

该委托方法将以CNContact对象的形式返回联系人,该联系人将在本地方法中进一步处理

-(void)getContactDetails:(CNContact *)contactObject {

NSLog(@“ NAME PREFIX ::%@”,contactObject.namePrefix);
NSLog(@“ NAME SUFFIX ::%@”,contactObject.name后缀);
NSLog(@“家族名称::%@”,contactObject.familyName);
NSLog(@“ GIVEN NAME ::%@”,contactObject.givenName);
NSLog(@“中间名::%@”,contactObject.middleName);

NSString * fullName = [NSString stringWithFormat:@”%@%@”,contactObject.givenName,contactObject.familyName];
[self.personName setText:fullName];

if(contactObject.imageData){
NSData * imageData =(NSData *)contactObject.imageData;
UIImage * contactImage = [[UIImage分配] initWithData:imageData];
[self.personImage setImage:contactImage];
}

NSString * phone = @””;
NSString * userPHONE_NO = @””;
for(CNLabeledValue * contactObject.phoneNumbers中的phonelabel){
CNPhoneNumber * phoneNo = phonelabel.value;
phone = [phoneNo stringValue];
如果(电话){
userPHONE_NO =电话;
}}

NSString * email = @“”;
NSString * userEMAIL_ID = @“”;
for(CNLabeledValue * contactObject.emailAddresses中的emaillabel){
电子邮件= emaillabel.value;
如果(电子邮件){
userEMAIL_ID =电子邮件;
}}

NSLog(@“电话号码::%@”,userPHONE_NO);
NSLog(@“ EMAIL ID ::%@”,userEMAIL_ID);
[self.emailId setText:userEMAIL_ID];
[self.phoneNo setText:userPHONE_NO];
}

步骤6.创建“ CNContactPickerViewController”类对象,并在按钮IBAction方法中注册其委托:

–(IBAction)selectAction:(id)sender {
CNContactPickerViewController * contactPicker = [CNContactPickerViewController新];
contactPicker.delegate =自我;
[自身presentViewController:contactPicker动画:是完成:无];
}

“ [[self presentViewController:contactPicker动画:是完成:无];”将显示联系人列表的视图。

步骤7.运行项目

一种 。 主视图

B.点击“选择联系人”按钮,CNContactPickerViewController将打开,如图所示:

C.选择一个联系人,视图将关闭,您将获得该联系人的详细信息,如图所示:

之前我们有写权限代码来访问联系人,但是现在它隐式地授予了访问联系人的权限。 使用此框架,我们还可以生成VCard(VCF)并在其他平台之间共享。 这是创建VCard的步骤。

步骤1.从CNContactPickerViewController中选择联系人,如上所述,您将在委托中获得CNContact对象。

步骤2.将联系人保存在文档目录中。 由于数据以NSData形式存储,因此可以将联系人转换为NSData
使用“ CNContactVCardSerialization”类以NSData格式表示VCard。

–(NSString *)saveContactToDocumentDirectory:(CNContact *)contact {

NSArray *路径= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString * documentsDirectory = [路径objectAtIndex:0];
NSString * VCardPath = [documentsDirectory stringByAppendingString:@” / VCard.vcf”];

NSArray * array = [[NSArray alloc] initWithObjects:contact,nil];

NSError *错误;
NSData * data = [CNContactVCardSerialization dataWithContacts:array error:&error];
[原子的数据writeToFile:VCardPath:YES];

返回VCardPath;
}

CNContactVCardSerialization类方法“ dataWithContacts:error:”采用联系人对象数组(CNContact类Object)。

“ saveContactToDocumentDirectory”方法将返回Vcard的文件路径。 使用文件路径,您可以将联系人导出到任何需要的地方。

如果您仍在使用iOS <9,则这是使用AddressBook的示例代码VCard。

资料来源:Applozic博客