iOS编程之Address Book (1)

iOS的地址簿技术提供一个在集中式数据库中存储用户联系人信息和其他私人信息、在应用程序间分享这些信息的方式。

地址簿技术包括四个方面:

Address Book framework提供接口来访问用户信息

Address Book UI framework 用来显示用户信息

Address Book databases 存储信息

Contacts application提供方式让用户来访问他们的联系信息

当你在你的应用程序中加入地址簿技术,用户将能够在你的应用程序中使用他们在其他应用程序中使用的联系人信息,例如邮件和文本。

按照下列步骤做:

1、访问用户地址簿数据库

2、提示用户要访问信息

3、显示联系人信息

4、修改用户地址簿数据库

要最大化的理解地址簿技术,应该先懂得navigation controller和view controller以及委托和协议

注意:在Mac OS X中的地址簿技术接口和iOS中的不一样

第一步:简单的开始

建立一个简单的应用程序来提示用户从自己的联系人列表里面选择一个人,然后显示选中的人的名字和电话号码

1、建立新项目----new project ----- Single View Application template

2、链接Address Book UI和Address Book frameworks到项目里

注意:如果没有链接这些framework项目编译时将报错

3、创建UI和头文件

当你创建用户接口,你要利用XCode来声明必要的动作和属性,创建一些头文件

打开主storyboard文件(MainStoryboard.storyboard),添加一个按钮和两个标签,如下图排列(其实用一般的XIB也是一样的)

把按钮和view controller中的事件连接起来,事件名称为showPicker,再把两个标签和view controller中相应的属性连接起来,属性名为firstName和phoneNumber

在头文件ViewController.h中,@interface最后要声明这个view controller继承ABPeoplePickerNavigationControllerDelegate

方式是直接加上<ABPeoplePickerNavigationControllerDelegate>

代码为

#import <UIKit/UIKit.h>
#import <AddressBookUI/AddressBookUI.h>
 
@interface ViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate>
 
@property (weak, nonatomic) IBOutlet UILabel *firstName;
@property (weak, nonatomic) IBOutlet UILabel *phoneNumber;
 
- (IBAction)showPicker:(id)sender;
 
@end

在.m文件中这样写

在showPicker方法中,创建了一个ABPeoplePickerNavigationController, 把view controller作为Picker的delegate, 然后再把picker作为modal view controller

- (IBAction)showPicker:(id)sender
{
    ABPeoplePickerNavigationController *picker =
            [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
 
    [self presentModalViewController:picker animated:YES];
}

这个picker在它自己的delegate里调用方法来相应用户的动作。

1.如果用户取消,则调用- (void)peoplePickerNavigationControllerDidCancel:   来dismiss这个picker

2.如果用户选择了地址簿里的一个人,则将调用

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

复制名字和号码放入标签中,然后再dismiss Picker

3.当用户点击picker中选中的人的一个属性,将调用

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker    shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

在这个应用程序中,当用户选中一个人时,picker总是会dismiss,所以没办法让用户选中这个人的一个属性。这意味着这个方法将不再被调用。但是如果把这个方法排除在外,整个协议的实现方法又不完整。

- (void)peoplePickerNavigationControllerDidCancel:
            (ABPeoplePickerNavigationController *)peoplePicker
{
    [self dismissModalViewControllerAnimated:YES];
}
 
 
- (BOOL)peoplePickerNavigationController:
            (ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {
 
    [self displayPerson:person];
    [self dismissModalViewControllerAnimated:YES];
 
    return NO;
}
 
- (BOOL)peoplePickerNavigationController:
            (ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier
{
    return NO;
}

如下图所示的

- (void)displayPerson:(ABRecordRef)person

用来显示名字和号码

注意:两者的代码是不同的

名字是string型的属性,记录中有名(first name)这个字段,这个也可能是NULL

电话号码是一个多值的属性,一个人可能有0、1或多个电话号码

本例中只用到列表中的第一个电话号码

- (void)displayPerson:(ABRecordRef)person
{
    NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person,
                                               kABPersonFirstNameProperty);
    self.firstName.text = name;
 
    NSString* phone = nil;
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,
                                    kABPersonPhoneProperty);
    if (ABMultiValueGetCount(phoneNumbers) > 0) {
       phone = (__bridge_transfer NSString*)
               ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
    } else {
        phone = @"[None]";
    }
    self.phoneNumber.text = phone;
}

然后运行程序

当你运行程序时看到的是一个按钮和两个空标签

点击一下按钮,弹出一个picker

然后你选择一个人,就能看到信息了

时间: 2024-10-11 23:22:47

iOS编程之Address Book (1)的相关文章

对IOS编程之User Interface的理解

IOS用户界面是APP呈现给用户最直观.最常用的方式,因此学会用户界面的编程是学习IOS编程很重要而且不可缺少的一部分:用户界面的实现方式可以分为纯代码.纯界面和代码+界面:纯代码实现的界面,在现在是比较不推崇的,因为用纯代码编写的界面难于维护,会使开发人员花费很多的时间去调整UI界面,但是纯代码可以实现很多特殊的效果:纯界面,往往其所能实现的功能是较于局限的,如用于说明的文本或图片等等:代码+界面,是现在比较推崇的界面实现方式,一是能够以一种直观的方式去编写用户界面,使界面更加易于维护,并且也

6. iOS 编程之 Xcode6 上配置国际化

开篇先说明,写好的程序在模拟器上运行是会出现变态情况的,建议使用真机做测试,笔者写此文章之前给模拟器折腾得死去活来,特告知众小伙伴,勿踩坑. 1.先创建一个项目 取名叫 LocalizableTest,然后按照图片的方式添加需要国际化的语言. Finish 后,就算是添加成功了,而后就可以在 Main.storyboard 和 LaunchScreen.xib 这两个的左边看到生成的小三角形,可展开,包含你刚添加的语言文件和一个base的文件. 在接着点中 Main.storyboard,按照图

iOS 编程之UIWindow切换

由于最近项目需要制作一个可定制的底部弹窗效果,因此研究了一下UIActionSheet,打算重写一个自定义的弹窗,在写demo的时候出于偷懒的原因,直接在新建项目的 - (void)viewDidLoad {} 中写入了窗口切换测试代码,结果在调试的时候就出现了如下错误信息: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application windows are

11. iOS 编程之 Xcode 报错:Apple LLVM 6.0 Error 的解决方法

一般来说,这个错误是由于你更新了 Xcode 的版本,或者是你删了之前的又重装了一遍 Xcode的话,就时不时会出现此问题. 解决办法很简单,只需要去目录下删掉点东西就行了.看如下操作: 1)点开 Finder 中的"前往". 2)上图看不出什么,还要你再长按住你键盘左下位置的 option 键,就会出现一个"资源库"选项. 因为资源库是系统的隐藏文件,存放了相当多系统相关的文件,怕万一给小菜鸟不小心删了某些文件,Apple 只好为了万无一失把它隐藏了起来. 只有按

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术.以优化的应用程序支持多核心处理器和其它的对称多处理系统的系统.这建立在任务并行运行的线程池模式的基础上的.它首次公布在Mac OS X 10.6 ,iOS 4及以上也可用. 设计: GCD的工作原理是:让程序平行排队的特定任务.依据可用的处理资源,安排他们在不论什么可用的处理器核心上运行任务. 一个任务能够是一个函数(function)或者是一个block. GCD的底层依旧是用线程实现,只是这样能够让程序

iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似.和Java的Runnable一样,NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main.相当与ja

iOS多线程编程之NSThread的使用

目录(?)[-] 简介 iOS有三种多线程编程的技术分别是 三种方式的有缺点介绍 NSThread的使用 NSThread 有两种直接创建方式 参数的意义 PS不显式创建线程的方法 下载图片的例子 新建singeView app 线程间通讯 线程同步 线程的顺序执行 其他同步 1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3.GCD 

【转载】iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

[转载]http://blog.csdn.net/totogo2010/article/details/8016129 iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 分类: iOS开发进阶2012-09-25 16:22 35382人阅读 评论(32) 收藏 举报 目录(?)[+] 介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程

iOS 多线程编程之Grand Central Dispatch(GCD)

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用. 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务. 一个任务可以是一个函数(function)或者是一个block. GCD的底层依然是用线程实现,不过这样可以让程序员不