溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

獲取通訊錄內(nèi)容

發(fā)布時(shí)間:2020-06-22 13:26:46 來(lái)源:網(wǎng)絡(luò) 閱讀:312 作者:ljl5125 欄目:開(kāi)發(fā)技術(shù)

先導(dǎo)入AddressBook.framework和

AddressBookUI.framework兩個(gè)框架

添加地址簿框架后,我們還需要在工程中添加相應(yīng)的頭文件:


#import <AddressBook/AddressBook.h>

#import <AddressBookUI/AddressBookUI.h>

1.AddressBookUI顯示部分

AddressBookUI中提供了和聯(lián)系人顯示信息相關(guān)的一些Controller,有四個(gè):

ABPeoplePickerNavigationController:顯示整個(gè)通訊錄并可以選擇一個(gè)聯(lián)系人的信息

ABPersonViewController:顯示一個(gè)具體聯(lián)系人的信息

ABNewPersonViewController:增加一個(gè)新的聯(lián)系人

ABUnknownPersonViewController:完善一個(gè)聯(lián)系人的信息

由于其中最主要的是ABPeoplePickerNavigationController,因此就具體的介紹一下通過(guò)程序顯示整個(gè)通訊錄并且可以選擇其中某個(gè)聯(lián)系人信息的步驟。

(a)創(chuàng)建并初始化一個(gè)ABPeoplePickerNavigationController對(duì)象

(b)設(shè)置其代理(delegate)

(c)用presentModalViewController:animated:這個(gè)方法進(jìn)行顯示整個(gè)通訊錄頁(yè)面

例子:

    - (IBAction)showPicker:(id)sender {  

    ABPeoplePickerNavigationController *picker =  

    [[ABPeoplePickerNavigationController alloc] init];  

  picker.peoplePickerDelegate = self;  

    [self presentModalViewController:picker animated:YES];  

   [picker release];  

ABPeoplePickerNavigationControllerDelegate的方法介紹

當(dāng)用戶選擇取消時(shí)調(diào)用這個(gè)方法,可以在這個(gè)方法里取消整個(gè)通訊錄頁(yè)面的顯示。

(1)peoplePickerNavigationControllerDidCancel: 

例子 : 

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {


    [peoplePicker dismissViewControllerAnimated:YES completion:nil];

}




(2)選擇具體聯(lián)系人的時(shí)候,拿到該聯(lián)系人的具體信息

-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person {

    //獲取聯(lián)系人姓名

    NSString *name = (__bridge NSString*)ABRecordCopyCompositeName(person);

    NSLog(@"name = %@",name);

    //獲取聯(lián)系人電話

    ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);

    

    NSMutableArray *phones = [[NSMutableArray alloc] init];

    int i;

    for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {

        NSString *aPhone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i);

        NSString *aLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i);

        NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);

        if([aLabel isEqualToString:@"_$!<Mobile>!$_"])

        {

            [phones addObject:aPhone];

        }

    }

    NSString *phone;

    if([phones count]>0)

    {

        NSString *mobileNo = [phones objectAtIndex:0];

        phone = mobileNo;

        NSLog(@"phone = %@", phone);

        //NSLog(mobileNo);

    }

    //獲取聯(lián)系人郵箱

    ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);

    NSMutableArray *emails = [[NSMutableArray alloc] init];

    for (i = 0;i < ABMultiValueGetCount(emailMulti); i++)

    {

        NSString *emailAdress = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i);

        [emails addObject:emailAdress];

    }

    NSString *email;

    if([emails count]>0)

    {

        NSString *emailFirst=[emails objectAtIndex:0];

        email = emailFirst;

        NSLog(@"email = %@",email);

    }

    [peoplePicker dismissViewControllerAnimated:YES completion:nil];

    


}



2.AddressBook部分

AddressBook框架部分主要是記錄聯(lián)系人的各個(gè)信息,ABRecordRef類(lèi)型的記錄既可以代表單個(gè)人(kABPersonType),也可以是一個(gè)集合(kABGroupType)。

通訊錄中聯(lián)系人的各個(gè)屬性有兩種形式,單值屬性和多值屬性。單值屬性對(duì)應(yīng)的只有一個(gè)值,比如聯(lián)系人的姓名;多值屬性對(duì)應(yīng)的可能有多個(gè)值,比如聯(lián)系人有多個(gè)電話號(hào)碼等。

(a)常用方法


  1. CFTypeRef ABRecordCopyValue (  

  2.    ABRecordRef record,  

  3.    ABPropertyID property  

  4. ); 

從一個(gè)記錄中獲取某個(gè)屬性對(duì)應(yīng)的值

(b)單值屬性對(duì)應(yīng)的方法


  1. CFStringRef ABRecordCopyCompositeName (  

  2.    ABRecordRef record  

  3. ); 

獲取聯(lián)系人完整的姓名。

(c)多值屬性對(duì)應(yīng)的方法


  1. CFTypeRef ABMultiValueCopyValueAtIndex (  

  2.    ABMultiValueRef multiValue,  

  3.    CFIndex index  

  4. ); 

返回對(duì)應(yīng)位置處的屬性值


  1. CFStringRef ABMultiValueCopyLabelAtIndex (  

  2.    ABMultiValueRef multiValue,  

  3.    CFIndex index  

  4. ); 

返回對(duì)應(yīng)位置處的屬性標(biāo)識(shí)


  1. CFArrayRef ABMultiValueCopyArrayOfAllValues (  

  2.    ABMultiValueRef multiValue  

  3. ); 

返回包含所有屬性值的數(shù)組


  1. CFIndex ABMultiValueGetCount (  

  2.    ABMultiValueRef multiValue  

  3. ); 

返回屬性值的個(gè)數(shù)


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI