zoukankan      html  css  js  c++  java
  • 访问系统自带通讯录(有界面)

      1 #import "ViewController.h"
      2 #import <AddressBookUI/AddressBookUI.h>
      3 
      4 @interface ViewController () <ABPeoplePickerNavigationControllerDelegate>
      5 @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
      6 @property (weak, nonatomic) IBOutlet UILabel *phoneNumLabel;
      7 
      8 @end
      9 
     10 @implementation ViewController
     11 
     12 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
     13 {
     14     // 创建联系人选择控制器
     15     ABPeoplePickerNavigationController *ppnc = [[ABPeoplePickerNavigationController alloc] init];
     16     
     17     // 设置代理
     18     ppnc.peoplePickerDelegate = self;
     19     
     20     // 显示控制器
     21     [self presentViewController:ppnc animated:YES completion:nil];
     22 
     23 }
     24 
     25 #pragma mark - ABPeoplePickerNavigationControllerDelegate(iOS8)
     26 /**
     27  *  选中联系人的时候会调用
     28  *
     29  *  @param person   被选中的联系人
     30  */
     31 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
     32 {
     33     [self getNameWithPerson:person];
     34     [self getPhoneNumberWithPerson:person];
     35 }
     36 
     37 /**
     38  *  选中联系人的某个属性的时候调用
     39  *
     40  *  @param person       被选中的联系人
     41  *  @param property     属性
     42  *  @param identifier   属性对应的标识
     43  */
     44 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
     45 {
     46     NSLog(@"%s", __func__);
     47 }
     48 
     49 #pragma mark - ABPeoplePickerNavigationControllerDelegate(iOS7)
     50 /**
     51  *  选中联系人的时候会调用
     52  *
     53  *  @param person       被选中的联系人
     54  */
     55 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
     56 {
     57     [self getNameWithPerson:person];
     58     [self getPhoneNumberWithPerson:person];
     59     [peoplePicker dismissViewControllerAnimated:YES completion:nil];
     60     return NO;
     61 }
     62 
     63 // iOS7中需要单独实现这个方法, 否则点取消会报错
     64 -(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
     65 {
     66     [peoplePicker dismissViewControllerAnimated:YES completion:nil];
     67 }
     68 
     69 
     70 - (void)getPhoneNumberWithPerson:(ABRecordRef)person
     71 {
     72     // ABMultiValueRef相当于是数组
     73     ABMultiValueRef phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty);
     74     CFIndex phonesCount = ABMultiValueGetCount(phoneNums);
     75     for (CFIndex index = 0; index < phonesCount; index ++) {
     76         NSString *phoneLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phoneNums, index));
     77         NSString *phoneValue = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNums, index));
     78         NSLog(@"%@ : %@", phoneLabel, phoneValue);
     79         self.phoneNumLabel.text = [NSString stringWithFormat:@"%@ : %@", phoneLabel, phoneValue];
     80     }
     81     // 释放内存
     82     CFRelease(phoneNums);
     83 }
     84 
     85 // 获取联系人名字
     86 - (void)getNameWithPerson:(ABRecordRef)person
     87 {
     88     // 通过记录来获取信息
     89     CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
     90     CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
     91     
     92     
     93     // (__bridge NSString *) 将对象的所有权交给Foundation框架, 本身并没有释放
     94     // NSString *first = (__bridge NSString *)(firstName);
     95     // NSString *last = (__bridge NSString *)(lastName);
     96     
     97     // 转换并自动释放原先的对象1
     98     NSString *first1 = CFBridgingRelease(firstName);
     99     NSString *last1 = CFBridgingRelease(lastName);
    100     
    101     // 转换并自动释放原先的对象2
    102     // NSString *first2 = (__bridge_transfer NSString *)(firstName);
    103     
    104     // 释放内存
    105     // CFRelease(firstName);
    106     // CFRelease(lastName);
    107     
    108     self.nameLabel.text = [NSString stringWithFormat:@"%@, %@", first1, last1];
    109     NSLog(@"%@, %@", first1, last1);
    110 }
    111 
    112 @end
  • 相关阅读:
    jq获取地址中的参数的值
    移动设备分辨率
    随机生成颜色
    小程序轮播图
    JavaScript中的constructor、instanceof、isPrototypeOf、typeof以及hasOwnProperty
    call()和apply()函数
    行内元素和块级元素
    js跳出循环的方法区别(break,continue,return)
    js 的四种设计模式的优缺点
    常见浏览器兼容性问题与解决方案
  • 原文地址:https://www.cnblogs.com/Rinpe/p/4766341.html
Copyright © 2011-2022 走看看