zoukankan      html  css  js  c++  java
  • 获取设备通讯录信息

    直接上代码:

    #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;
    
        }];
    
    }
  • 相关阅读:
    Lambda表达式 For Android
    RxJava重温基础
    Asp.Net Core 依赖注入默认DI,Autofac注入
    Asp.Net Core2.0 基于QuartzNet任务管理系统
    Asp.Net Core 基于QuartzNet任务管理系统(这是一篇用来水的随笔)
    ADO.NET通用类库
    TripleDES加密解密
    ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录
    ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI(可自定义路由)添加
    ASP.NET Core的身份认证框架IdentityServer4--(2)API跟WEB端配置
  • 原文地址:https://www.cnblogs.com/xuzb/p/8677785.html
Copyright © 2011-2022 走看看