美文网首页学无止境上海恩美路演牛叉的demo
iOS9.0 点击按钮访问手机通讯录

iOS9.0 点击按钮访问手机通讯录

作者: Alexander | 来源:发表于2017-02-09 22:43 被阅读984次

前言

功能介绍: 点击按钮后从屏幕底部弹出手机通讯录界面, 点击联系人手机号后, 联系人姓名以及手机号显示到指定的UITextFiled中.
点击Button弹出手机通讯录界面, 选择联系人
  • 该方法是iOS 9的方法, 步骤就三步:
  • 1, 导入头文件:
#import <ContactsUI/ContactsUI.h>
  • 2, 用户是否授权, 如果授权设置代理:
遵守代理: <CNContactPickerDelegate>
  • 3, 实现代理方法:
    -  (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;
核心代码的具体实现:
  • 授权以及遵守代理
/**
  逻辑:  点击按钮后会弹出一个弹框, 提示用户是否授权, 只有授权了, 才能调出手机通讯录界面.
  功能:  用户是否授权, 以及遵守代理, 设置代理等相关操作
*/
- (IBAction)button:(id)sender {
    
    //让用户给权限,没有的话会被拒的各位
    CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
    if (status == CNAuthorizationStatusNotDetermined) {
        CNContactStore *store = [[CNContactStore alloc] init];
        [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (error) {
                NSLog(@"没有授权, 需要去设置中心设置授权");
            }else
            {
                NSLog(@"用户已授权限");
                CNContactPickerViewController * picker = [CNContactPickerViewController new];
                picker.delegate = self;
                // 加载手机号
                picker.displayedPropertyKeys = @[CNContactPhoneNumbersKey];
                [self presentViewController: picker  animated:YES completion:nil];
            }
        }];
    }
    
    if (status == CNAuthorizationStatusAuthorized) {

        //有权限时
        CNContactPickerViewController * picker = [CNContactPickerViewController new];
        picker.delegate = self;
        picker.displayedPropertyKeys = @[CNContactPhoneNumbersKey];
        [self presentViewController: picker  animated:YES completion:nil];
    }
    else{
        NSLog(@"您未开启通讯录权限,请前往设置中心开启");
    }
}
  • 实现代理方法
/** 
 逻辑:  在该代理方法中会调出手机通讯录界面, 选中联系人的手机号, 会将联系人姓名以及手机号赋值给界面上的TEXT1和TEXT2两个UITextFiled上.
功能: 调用手机通讯录界面, 获取联系人姓名以及电话号码.
*/
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {
    
    CNContact *contact = contactProperty.contact;
    
    NSLog(@"%@",contactProperty);
    NSLog(@"givenName: %@, familyName: %@", contact.givenName, contact.familyName);
    
    self.TEXT1.text = [NSString stringWithFormat:@"%@%@",contact.familyName,contact.givenName];
    if (![contactProperty.value isKindOfClass:[CNPhoneNumber class]]) {
        NSLog(@"提示用户选择11位的手机号");
        return;
    }
    
    CNPhoneNumber *phoneNumber = contactProperty.value;
    NSString * Str = phoneNumber.stringValue;
    NSCharacterSet *setToRemove = [[ NSCharacterSet characterSetWithCharactersInString:@"0123456789"]invertedSet];
    NSString *phoneStr = [[Str componentsSeparatedByCharactersInSet:setToRemove]componentsJoinedByString:@""];
    if (phoneStr.length != 11) {

                NSLog(@"提示用户选择11位的手机号");
    }
    
    NSLog(@"-=-=%@",phoneStr);
    self.TEXT2.text = phoneStr;
}
容易遗漏的一点
  • iOS 9 之后, 苹果更注重用户隐私等问题, 所以只要涉及到用户隐私等问题, 都会牵扯到授权问题, 所以, 即使您完成了上述全部代码, 运行后仍然会崩溃. 控制台会打印一下信息
This app has crashed because it attempted to access 
privacy-sensitive data without a usage description. 
 The app's Info.plist must contain an NSContactsUsageDescription 
key with a string value explaining to
 the user how the app uses this data.
 意思是说:你需要在info.plist文件 添加一个“NSContactsUsageDescription ”的Key,
Value添加一个描述。
  • 崩溃的原因: 需要在plist文件中添加一下对应的字段
1,在项目中找到info.plist文件,右击有个 Open As,以Source Code 的形式打开

2,分别复制 以下 Value 和Key,Key 一定不能错,Value 貌似可以随便填写


相机权限描述:

    <key>NSCameraUsageDescription</key>
    <string>cameraDesciption</string>

通信录:
    <key>NSContactsUsageDescription</key>
    <string>contactsDesciption</string>

麦克风:
    <key>NSMicrophoneUsageDescription</key>
    <string>microphoneDesciption</string>

相机:
    <key>NSPhotoLibraryUsageDescription</key>
    <string>photoLibraryDesciption</string>

总结:

社会在不断进步, 我希望自己能跟上社会发展的速度, 不思进取, 最终将会被淘汰. 工作上不要找借口, 生活上要悠然自得. 保重身体方能做好工作.希望自己变得更强, 更上进.

相关文章

  • iOS9.0 点击按钮访问手机通讯录

    前言 功能介绍: 点击按钮后从屏幕底部弹出手机通讯录界面, 点击联系人手机号后, 联系人姓名以及手机号显示到指定的...

  • Android手机开发之通讯录

    Android手机开发——通讯录 实现增加、查询、修改、删除的功能,输入联系人信息,点击“添加”按钮,可以添加联系...

  • iOS9.0访问通讯录---ContactsUI和Contact

    一. 简介 在iOS9.0之前, 由于几乎只能通过使用了CoreFoundation的AddressBook框架来...

  • 淘宝爬虫-使用selenium采集关键词为电动车的数据

    实现功能: 1、使用geckodriver驱动firefox访问淘宝首页,输入关键词,点击搜索按钮,翻页,点击确定...

  • 弹出框(警告框)iOS9.0使用方法

    在iOS9.0之前,使用弹出框的方法就是 之后要具体实现点击某一个按钮时发生的事件,就要在代理方法里面写。 这是之...

  • Mac SSH iPhone

    一、手机安装OpenSSH 打开手机Cydia软件,点击底部搜索按钮,搜索Open SSH,点击安装。 二、SSH...

  • Android 获取通讯录信息

    启动通讯录页面获取用户点击的 item 的数据(姓名、手机号) //启动通讯录页面 startActivityFo...

  • h5 video 横屏播放

    在android ios 手机上 点击 全屏 按钮 只能竖屏的 尝试 横屏播放点击全屏 按钮 不能横屏 是 因为 ...

  • iOS纯代码实现 强制横屏

    iOS9.0强制横屏 适用于“当需要在某个竖屏的情况下点击一个按钮跳转到另一个横屏的controller” 首先 ...

  • 通讯录技术

    通讯录技术 目标:获取通讯录中的信息.简称AB和CN. iOS9.0之前:(使用C语言的数据类型)1. Addre...

网友评论

    本文标题:iOS9.0 点击按钮访问手机通讯录

    本文链接:https://www.haomeiwen.com/subject/hgqlittx.html