zoukankan      html  css  js  c++  java
  • iOS 学习

    苹果在iOS9的SDK中废除了AddressBookUI.framework的一些功能(是不是这个库都废除了,有待验证),具体和保存联系人相关的几个系统界面如下:
    联系人选择:AddressBookUI/ABPeoplePickerNavigationController.h
    联系人详情:AddressBookUI/ABPersonViewController.h
    未知联系人:AddressBookUI/ABUnknownPersonViewController.h
    新建联系人:AddressBookUI/ABNewPersonViewController.h
    新的SDK中使用
    联系人选择:ContactsUI/CNContactPickerViewController.h
    联系人详情、新建联系人、未知联系人:ContactsUI/CNContactViewController.h(使用不同方法创建,下面会说)

    下面的例子,仍存在问题

    1.UINavgationController 标题、左右 item 都是系统自带的,联系人详情的时候,navgationItem 的返回按钮无点击事件,应该怎么自定义?

    2.联系人 logo 拍照黑屏(真机测试已获取权限),待解决

    #import "ViewController.h"
    #import <ContactsUI/CNContactPickerViewController.h>
    #import <ContactsUI/CNContactViewController.h>
    @interface ViewController ()<CNContactViewControllerDelegate,CNContactPickerDelegate>
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    - (IBAction)Click:(id)sender {
        [self set1];
    }
    //保存新联系人
    -(void)set{
        //1.创建 Contact 对象,必须是可变的
        CNMutableContact *contact = [[CNMutableContact alloc]init];
        //2.为 contact 赋值
        [self setValue4Contact:contact existContect:NO];
        //3.创建新建好友页面
        CNContactViewController *controller = [CNContactViewController viewControllerForNewContact:contact];
        controller.delegate = self;
        
        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];
        [self presentViewController:nav animated:YES completion:nil];
    }
    
    //保存现有联系人
    -(void)set1{
        //跳转到联系人选择页面,注意这里没有使用 UINavgationController
        CNContactPickerViewController *picker = [[CNContactPickerViewController alloc]init];
        picker.delegate = self;
        [self presentViewController:picker animated:YES completion:nil];
    }
    
    //实现点选的代理,其他代理方法根据自己需求实现
    -(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
    
        [picker dismissViewControllerAnimated:YES completion:^{
        // copy 一份可写的 contact 对象,不要尝试 alloc 一类,mutableCopy 独此一家
        CNMutableContact *c = [contact mutableCopy];
        //为 contact 赋值
        [self setValue4Contact:c existContect:YES];
        //跳转到新建联系人页面
        CNContactViewController *controller = [CNContactViewController viewControllerForNewContact:c];
        controller.delegate = self;
        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];
        
        [self presentViewController:nav animated:YES completion:nil];
    
        }];
    }
    //设置要保存的 contact 对象
    - (void)setValue4Contact:(CNMutableContact *)contact existContect:(BOOL)exist{
        if (!exist) {
            //名字和头像
            contact.nickname = @"oriccheng";
            /*
             UIImage *logo = [UIImage imageNamed:@""];
             NSData *dataRef = UIImagePNGRepresentation(logo);
             contact.imageData = dataRef;
             
             */
        }
        CNLabeledValue *phoneNumber = [CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberMobile value:[CNPhoneNumber phoneNumberWithStringValue:@"18888888888"]];
        if (!exist) {
            contact.phoneNumbers = @[phoneNumber];
        }else{
            //现有联系人情况
            if ([contact.phoneNumbers count] > 0) {
                NSMutableArray *phoneNumbers = [[NSMutableArray alloc]initWithArray:contact.phoneNumbers];
                [phoneNumbers addObject:phoneNumber];
                contact.phoneNumbers = phoneNumbers;
            }else{
                contact.phoneNumbers = @[phoneNumber];
            }
        }
        //网址:CNLabeledValue *url = [CNLabeledValue labeledValueWithLabel:@"" value:@""];
        //邮箱:CNLabeledValue *mail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:self.poiData4Save.mail];
        
        //特别说一个地址,PostalAddress 对应的才是地址
        CNMutablePostalAddress *address = [[CNMutablePostalAddress alloc]init];
        address.state = @"江苏省";
        address.city = @"南京市";
        address.postalCode = @"20000";
        address.street = @"新街口王八街18号";
        //生成的上面直至的 CNLabeledValue,其中可以设置类型 CNLabelWork 等等
        CNLabeledValue *addressLabel = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:address];
        if (!exist) {
            contact.postalAddresses = @[addressLabel];
        }else{
            if (contact.postalAddresses.count > 0) {
                NSMutableArray *addresses = [[NSMutableArray alloc]initWithArray:contact.postalAddresses];
                [addresses addObject:addressLabel];
                contact.postalAddresses = addresses;
            }else{
                contact.postalAddresses = @[addressLabel];
            }
        }
        
    
    }
  • 相关阅读:
    mysql之数据库数据导入EXCEL表格
    Docker 删除所有容器
    Docker之Docker文件,一篇就够了
    Docker 安装与基本操作指令
    shell实例:九九乘法表,各种图形,幸运大抽奖
    Firewalld防火墙(包含firewall-config图形工具和firewall-cmd命令行工具如何使用)
    shell脚本--循环语句、(概念及实例)
    华为ENSP------access、trunk、hybrid配置连载2
    2020-11-16T11:13:27.991012Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 2020-11-16T11:13:27.991065Z 0 [ERROR] Aborting
    华为ESPN-------MSTP连载(4)
  • 原文地址:https://www.cnblogs.com/asamu/p/5498479.html
Copyright © 2011-2022 走看看