iOS通訊錄開發(fā)

蘋果允許訪問用戶的通訊錄,提供的api分為兩種讶凉,區(qū)別在于有沒有UI界面畏浆,工作中一般都會選用有UI界面鉴扫,從iOS6開始,無UI界面的通訊錄信息需要獲取到用戶的授權(quán)才能訪問通訊錄味悄,所以在使用之前是需要檢測用戶的授權(quán)狀態(tài)

有UI界面 (無需授權(quán))

Paste_Image.png

iOS 9 之前

點擊屏幕開始選擇

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 1.創(chuàng)建選擇聯(lián)系人的界面
    ABPeoplePickerNavigationController *ppnc = [[ABPeoplePickerNavigationController alloc] init];
    
    // 2.設(shè)置代理      
    ppnc.peoplePickerDelegate = self;
    
    // 3.彈出界面(modal)
    [self presentViewController:ppnc animated:YES completion:nil];
}

底部彈出通訊錄控制器

// 何時觸發(fā):   選中某一個聯(lián)系人時,會執(zhí)行該方法
//  備注: 如果實現(xiàn)該方法,那么選中一個聯(lián)系人,系統(tǒng)會自動退出控制器    如果不實現(xiàn)就會來到用戶詳情的控制器

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

    //   ABRecordRef : 記錄,一個聯(lián)系人就是一條記錄

    // 1.獲取該聯(lián)系人的姓名
    CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
    CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
    
    /*
     橋接方式:
     (__bridge NSString *) : 僅僅是將對象的所有權(quán)交給Foundation的引用使用
     (__bridge_transfer NSString *) : 對象所有權(quán)交給Foundation的引用,并且內(nèi)存也交給它來管理
     */
    NSString *firstname = (__bridge_transfer NSString *)firstName;
    NSString *lastname = (__bridge_transfer NSString *)lastName;
    NSLog(@"firstname:%@ lastname:%@", firstname, lastname);
    
    // 2.獲取該聯(lián)系人的電話號碼
    // 2.1.獲取所有的電話
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
    
    // 2.2.遍歷所有的電話
    CFIndex count = ABMultiValueGetCount(phones);
    for (int i = 0; i < count; i++) {
        // 2.2.1.獲取電話號碼
        NSString *phoneValue = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phones, i);
        
        // 2.2.2.獲取電話的標(biāo)簽
        NSString *phoneLabel = (__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex(phones, i);
        
        NSLog(@"%@ %@", phoneLabel, phoneValue);
    }
    
    // 3.釋放不再使用的對象
    CFRelease(phones);
}

點擊取消會觸發(fā)該方法

// 點擊了取消按鈕會執(zhí)行該方法
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
    NSLog(@"peoplePicker:%@",peoplePicker);
}

在用戶詳情控制器點擊屬性之會來到這里

// 如果實現(xiàn)了該方法,那么選中一個聯(lián)系人的一個屬性后,系統(tǒng)會自動退出控制器
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    NSLog(@"person:%@",person);
    NSLog(@"property:%zd",property);
    NSLog(@"identifier:%zd",identifier);
}

iOS9以后 也提供了兩套框架 使用起來更加的面向?qū)ο?/h2>

ContactsUI.framework 有UI

Contacts.framework 無UI

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 1.創(chuàng)建聯(lián)系人的界面
    CNContactPickerViewController *cpvc = [[CNContactPickerViewController alloc] init];
    
    // 2.設(shè)置代理
    cpvc.delegate = self;
    
    // 3.彈出控制器
    [self presentViewController:cpvc animated:YES completion:nil];
}

#pragma mark - 實現(xiàn)CNContactPickerViewController的代理方法

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{
    // 1.獲取聯(lián)系人的姓名
    NSString *firstname = contact.familyName;
    NSString *lastname = contact.givenName;
    NSLog(@"%@ %@", firstname, lastname);
    
    // 2.獲取電話號碼
    NSArray *phones = contact.phoneNumbers;
    
    // 3.遍歷所有的電話號碼
    for (CNLabeledValue *labeldValue in phones) {
        // 3.1.取出電話號碼的標(biāo)簽
        NSString *phoneLabel = labeldValue.label;
        
        // 3.2.取出電話號碼的值
        CNPhoneNumber *phoneNumer = labeldValue.value;
        NSString *phoneValue = phoneNumer.stringValue;
        NSLog(@"%@ %@", phoneLabel, phoneValue);
    }
}
//  取消的時候執(zhí)行該方法
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{
    NSLog(@"點擊了取消");

}
系統(tǒng)提供的通訊錄UI界面.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草戈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侍瑟,更是在濱河造成了極大的恐慌唐片,老刑警劉巖丙猬,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異费韭,居然都是意外死亡茧球,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門星持,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抢埋,“玉大人,你說我怎么就攤上這事督暂【韭ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵逻翁,是天一觀的道長饥努。 經(jīng)常有香客問我,道長卢未,這世上最難降的妖魔是什么肪凛? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮辽社,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翘鸭。我一直安慰自己滴铅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布就乓。 她就那樣靜靜地躺著汉匙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪生蚁。 梳的紋絲不亂的頭發(fā)上噩翠,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音邦投,去河邊找鬼伤锚。 笑死,一個胖子當(dāng)著我的面吹牛志衣,可吹牛的內(nèi)容都是我干的屯援。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼念脯,長吁一口氣:“原來是場噩夢啊……” “哼狞洋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绿店,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤吉懊,失蹤者是張志新(化名)和其女友劉穎庐橙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體借嗽,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡态鳖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淹魄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郁惜。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖甲锡,靈堂內(nèi)的尸體忽然破棺而出兆蕉,到底是詐尸還是另有隱情,我是刑警寧澤缤沦,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布虎韵,位于F島的核電站,受9級特大地震影響缸废,放射性物質(zhì)發(fā)生泄漏包蓝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一企量、第九天 我趴在偏房一處隱蔽的房頂上張望测萎。 院中可真熱鬧,春花似錦届巩、人聲如沸硅瞧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腕唧。三九已至,卻和暖如春瘾英,著一層夾襖步出監(jiān)牢的瞬間枣接,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工缺谴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留但惶,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓瓣赂,卻偏偏與公主長得像榆骚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子煌集,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 通訊錄簡介 通訊錄使用場景: 電商類的 App妓肢,設(shè)置收貨人電話號碼。 即時通訊類 App苫纤,添加手機聯(lián)系人好友碉钠。 通...
    LeeJay閱讀 24,661評論 43 107
  • 實現(xiàn)類似京東地址編輯時選取通訊錄后得到電話和名字.這里將分別實現(xiàn)iOS7,8,9,希望對你有幫助,若有幫助請點喜歡...
    超_iOS閱讀 7,672評論 14 15
  • iOS9之前有兩個通訊錄相關(guān)的框架纲缓,AddressBookUI.framework 和 AddressBook....
    ZhengYaWei閱讀 434評論 0 5
  • 今天正好用到通訊錄,總結(jié)一下使用過程.首先蘋果的通訊錄是保存在數(shù)據(jù)庫里面的,蘋果不允許開發(fā)者直接訪問數(shù)據(jù)庫.不過可...
    奇董閱讀 1,494評論 2 5
  • 通過今天的證據(jù)目錄的整理,發(fā)現(xiàn)在證據(jù)交換階段有部分主張尚需完善喊废。僅僅是這個目錄就用了近兩個小時祝高,中間我沒有用番茄時...
    青言青語閱讀 126評論 0 0