1. 程式人生 > >獲取設備通訊錄信息

獲取設備通訊錄信息

int uic 信息 atomic sub AC mat per post

直接上代碼:

#import "ViewController.h"

#import <Contacts/Contacts.h>

#import <ContactsUI/ContactsUI.h>

@interface ViewController ()<CNContactPickerDelegate>

@property (nonatomic, strong) UIButton *btn;

@property (nonatomic, strong) UILabel *label;

@property (nonatomic, strong) UILabel *labelNum;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

_btn = [UIButton buttonWithType:UIButtonTypeSystem];

_btn.frame = CGRectMake(10, 20, 50, 30);

[_btn setTitle:@"按鈕" forState:0];

[_btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:_btn];

_label = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 50, 30)];

[self.view addSubview:_label];

_labelNum = [[UILabel alloc] initWithFrame:CGRectMake(10, 120, 50, 30)];

[self.view addSubview:_labelNum];

}

- (void)btnAction {

CNContactPickerViewController *contactPickerViewController = [[CNContactPickerViewController alloc] init];

contactPickerViewController.delegate = self;

[self presentViewController:contactPickerViewController animated:YES completion:nil];

}

// 如果實現該方法當選中聯系人時就不會再出現聯系人詳情界面, 如果需要看到聯系人詳情界面只能不實現這個方法

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact {

NSLog(@"選中某一個聯系人時調用---------------------------------");

[self printContactInfo:contact];

}

// 同時選中多個聯系人

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact *> *)contacts {

for (CNContact *contact in contacts) {

NSLog(@"================================================");

[self printContactInfo:contact];

}

}

- (void)printContactInfo:(CNContact *)contact {

NSString *givenName = contact.givenName;

NSString *familyName = contact.familyName;

NSLog(@"givenName=%@, familyName=%@", givenName, familyName);

NSArray * phoneNumbers = contact.phoneNumbers;

_label.text = familyName;

for (CNLabeledValue<CNPhoneNumber*>*phone in phoneNumbers) {

NSString *label = phone.label;

CNPhoneNumber *phonNumber = (CNPhoneNumber *)phone.value;

NSLog(@"label=%@, value=%@", label, phonNumber.stringValue);

_labelNum.text = phonNumber.stringValue;

}

}

// 註意:如果實現該方法,上面那個方法就不能實現了,這兩個方法只能實現一個

// - (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {

// NSLog(@"選中某個聯系人的某個屬性時調用");

// }

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

CNAuthorizationStatus authorizationStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];

if (authorizationStatus == CNAuthorizationStatusAuthorized) {

NSLog(@"沒有授權...");

}

// 獲取指定的字段,並不是要獲取所有字段,需要指定具體的字段

NSArray *keysToFetch = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey];

CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch];

CNContactStore *contactStore = [[CNContactStore alloc] init];

[contactStore enumerateContactsWithFetchRequest:fetchRequest error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {

NSLog(@"-------------------------------------------------------");

NSString *givenName = contact.givenName;

NSString *familyName = contact.familyName;

NSLog(@"givenName=%@, familyName=%@", givenName, familyName);

NSArray *phoneNumbers = contact.phoneNumbers;

for (CNLabeledValue *labelValue in phoneNumbers) {

NSString *label = labelValue.label;

CNPhoneNumber *phoneNumber = labelValue.value;

NSLog(@"label=%@, phone=%@", label, phoneNumber.stringValue);

}

// *stop = YES; // 停止循環,相當於break;

}];

}

獲取設備通訊錄信息