美文网首页学无止境上海恩美路演牛叉的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 点击按钮访问手机通讯录

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