iOS 通訊錄開發(fā)獲取姓名和指定號碼

實現(xiàn)類似京東地址編輯時選取通訊錄后得到電話和名字.這里將分別實現(xiàn)iOS7,8,9,希望對你有幫助,若有幫助請點喜歡,若有疑問請評論,讓我看到你的雙手謝謝.原創(chuàng)文章---lzc.
先說iOS9:導入#import <ContactsUI/ContactsUI.h>
實現(xiàn)CNContactPickerDelegate協(xié)議方法.

//讓用戶給權限,沒有的話會被拒的各位
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
    if (status == CNAuthorizationStatusNotDetermined) {
        CNContactStore *store = [[CNContactStore alloc] init];
        [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (error) {
                NSLog(@"weishouquan ");
            }else
            {
                NSLog(@"chenggong ");//用戶給權限了
                CNContactPickerViewController * picker = [CNContactPickerViewController new];
                picker.delegate = self;
                picker.displayedPropertyKeys = @[CNContactPhoneNumbersKey];//只顯示手機號
                [self presentViewController: picker  animated:YES completion:nil];
            }
        }];
    }

if (status == CNAuthorizationStatusAuthorized) {//有權限時
        CNContactPickerViewController * picker = [CNContactPickerViewController new];
        picker.delegate = self;
        picker.displayedPropertyKeys = @[CNContactPhoneNumbersKey];
        [self presentViewController: picker  animated:YES completion:nil];
    }
else{
        @"您未開啟通訊錄權限,請前往設置中心開啟";
    }

authorizationStatusForEntityType:methods這個方法是CNContactStore的類方法截粗,需要一個 CNEntityType 參數摹芙,返回值是授權得到的狀態(tài)CNAuthorizationStatus稍味,一共有四種承疲,分別為:
NotDetermined:表示用戶還沒有允許或禁止訪問通訊錄數據庫吆你。首次安裝的應用軟件處于這種狀態(tài)。
Restricted:不僅應用軟件無法訪問通訊錄數據肴盏,就連用戶也無法通過設置修改授權狀態(tài)。該狀態(tài)是由于其他限制尊搬,也就是家長控制(parental control)所導致叁鉴。
Denied:表示用戶不允許訪問通訊錄數據。只有用戶才能夠修改該狀態(tài)佛寿。
Authorized:這是每個應用軟件期望得到的狀態(tài)。在該狀態(tài)下但壮,應用軟件可以隨意訪問通訊錄數據庫冀泻,使用通訊錄數據執(zhí)行操作。

我們其實只需要判斷授權狀態(tài)是否為 CNAuthorizationStatusAuthorized 即可蜡饵,如果是表示授權狀態(tài)成功弹渔,否則失敗,不允許訪問通訊錄溯祸。
CNContactStore (相當于ABAddressBook)類以編程方式展示了聯(lián)系人數據庫肢专,并且提供了許多實現(xiàn)不同任務的方法,例如獲取焦辅,保存或者更新記錄博杖,權限檢查和權限請求,很多很多筷登。
CNContact類(相當于ABRecordRef)展示一個單獨的聯(lián)系人記錄剃根,但是記住這個類的特性是不可變的。如果你想創(chuàng)建一個新的聯(lián)系人記錄或者更新一個已存在的聯(lián)系人記錄前方,你必須使用CNMutableContact類狈醉。


#pragma mark - 點擊某個聯(lián)系人的某個屬性(property)時觸發(fā)并返回該聯(lián)系人屬性(contactProperty)。
//只實現(xiàn)該方法時惠险,可以進入到聯(lián)系人詳情頁面(如果predicateForSelectionOfProperty屬性沒被設置或符合篩選條件苗傅,如不符合會觸發(fā)默認操作,即打電話班巩,發(fā)郵件等)渣慕。
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {
    NSLog(@"%@",contactProperty);
    CNContact *contact = contactProperty.contact;
    NSLog(@"givenName: %@, familyName: %@", contact.givenName, contact.familyName);
    self.nameTextView.text = [NSString stringWithFormat:@"%@%@",contact.familyName,contact.givenName];
    if (![contactProperty.value isKindOfClass:[CNPhoneNumber class]]) {
        [[HNPublicTool shareInstance] showHudErrorMessage:@"請選擇11位手機號"];
        return;
    }
    CNPhoneNumber *phoneNumber = contactProperty.value;
    NSString * Str = phoneNumber.stringValue;
     NSCharacterSet *setToRemove = [[ NSCharacterSet characterSetWithCharactersInString:@"0123456789"]invertedSet];
    NSString *phoneStr = [[Str componentsSeparatedByCharactersInSet:setToRemove]componentsJoinedByString:@""];
    if (phoneStr.length != 11) {
        [[HNPublicTool shareInstance] showHudErrorMessage:@"請選擇11位手機號"];
    }
    NSLog(@"-=-=%@",phoneStr);
    self.phoneTextView.text = phoneStr;
}

未完待續(xù),新技術資料較少,花了不少精力,謝謝幫助我的大神,博采眾長,方得此篇...
更新如下
iOS7,8中,導入

import <AddressBookUI/AddressBookUI.h>,遵守協(xié)議并實現(xiàn)方法,略麻煩

ABPeoplePickerNavigationControllerDelegate

- (void)visitAddressBook
{//授權
    __weak typeof(self)weakSelf = self;
    ABAddressBookRef bookref = ABAddressBookCreateWithOptions(NULL, NULL);
    ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
    /*kABAuthorizationStatusNotDetermined = 0,    // 未進行授權選擇
     kABAuthorizationStatusRestricted,           // 未授權,且用戶無法更新趣竣,如家長控制情況下
     kABAuthorizationStatusDenied,               // 用戶拒絕App使用
     kABAuthorizationStatusAuthorized            // 已授權摇庙,可使用*/
    if (status == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(bookref, ^(bool granted, CFErrorRef error) {
            if (error) {
                NSLog(@"授權錯誤");
            }
            if (granted) {
                NSLog(@"授權chengg");
                ABPeoplePickerNavigationController *peosonVC = [[ABPeoplePickerNavigationController alloc] init];
                peosonVC.peoplePickerDelegate = weakSelf;
                peosonVC.displayedProperties = @[[NSNumber numberWithInt:kABPersonPhoneProperty]];
                [weakSelf presentViewController:peosonVC animated:YES completion:nil];
            }
        });
    }
    if (status == kABAuthorizationStatusAuthorized) {
        ABPeoplePickerNavigationController *peosonVC = [[ABPeoplePickerNavigationController alloc] init];
        peosonVC.peoplePickerDelegate = weakSelf;
        peosonVC.displayedProperties = @[[NSNumber numberWithInt:kABPersonPhoneProperty]];
        [weakSelf presentViewController:peosonVC animated:YES completion:nil];
    }else
    {
      @"您未開啟通訊錄權限,請前往設置中心開啟"];
    }
    
}

#pragma mark iOS7通訊錄代理方法
//取消選擇 7上必須有,否則崩lzc,切記
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
    [peoplePicker dismissViewControllerAnimated:YES completion:nil];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    return YES;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    // 獲取該聯(lián)系人多重屬性--電話號
    ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);
    
    // 獲取該聯(lián)系人的名字,簡單屬性遥缕,只需ABRecordCopyValue取一次值
    ABMutableMultiValueRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
    NSString *firstname = (__bridge NSString *)(firstName);
    ABMutableMultiValueRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
    NSString *lastname = (__bridge NSString *)(lastName);
    // 獲取點擊的聯(lián)系人的電話
    NSLog(@"聯(lián)系人名字 : %@%@",lastname,firstname);
    
    // 點擊某個聯(lián)系人電話后dismiss聯(lián)系人控制器卫袒,并回調點擊的數據
    [self dismissViewControllerAnimated:YES completion:^{
        // 從多重屬性——電話號中取值,參數2是取點擊的索引
        NSString *aPhone =  (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phoneMulti, ABMultiValueGetIndexForIdentifier(phoneMulti,identifier)) ;
        // 獲取點擊的聯(lián)系人的電話单匣,也可以取標簽等
        NSLog(@"聯(lián)系人電話 : %@",aPhone);
        // 去掉電話號中的 "-"
        aPhone = [aPhone stringByReplacingOccurrencesOfString:@"-" withString:@"" ];
        NSLog(@"去掉-號 : %@",aPhone);
      
    }];
    
    return NO;//如果不返回NO,會有別的效果,希望你動動手,我就不告訴你--LZC
}

iOS8與7差別不大

#pragma mark - ios8走這個 選中聯(lián)系人的某個屬性的時候調用
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
  //與7一樣,蝙蝠問題省略
}

/*(a)peoplePickerNavigationControllerDidCancel:當用戶選擇取消時調用這個方法夕凝,可以在這個方法里取消整個通訊錄頁面的顯示宝穗。

(b)peoplePickerNavigationController:shouldContinueAfterSelectingPerson: 當用戶選擇了通訊錄中某一個聯(lián)系人時調用這個方法,可以在這里獲取聯(lián)系人的信息码秉。如果希望可以繼續(xù)顯示這個聯(lián)系人更具體的信息逮矛,則return YES。否則取消整個通訊錄頁面的顯示并return NO转砖。

(c)peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 如果上一個方法返回的是YES须鼎,則會顯示某一個聯(lián)系人信息,如果選擇了聯(lián)系人的某一項紀錄府蔗,就會調用這個方法晋控,可以通過點擊選擇聯(lián)系人的某一項信息。如果 希望可以對選擇的某一項紀錄進行進一步操作姓赤,比如直接撥打電話或調用郵箱發(fā)送郵件赡译,則return YES。否則取消整個通訊錄頁面的顯示并return NO不铆。*/
未完持續(xù),技術是一天天積累的,加油

感謝下面的大神
http://www.reibang.com/p/e6b7cb1eca9e
http://www.reibang.com/p/f47daa36f75a
等.

4.23更新
這是本人首篇閱讀破百的技術類文章,所以還是要多鉆研技術.只要技術高一定會有更多人閱讀.以后還是會持續(xù)學習新技術,堅持更新. 套用主播們一句話:新來的朋友點波關注,謝謝.
貴在堅持.與君共勉.
---完

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蝌焚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子誓斥,更是在濱河造成了極大的恐慌只洒,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岖食,死亡現(xiàn)場離奇詭異红碑,居然都是意外死亡,警方通過查閱死者的電腦和手機泡垃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門析珊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔑穴,你說我怎么就攤上這事忠寻。” “怎么了存和?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵奕剃,是天一觀的道長。 經常有香客問我捐腿,道長纵朋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任茄袖,我火速辦了婚禮操软,結果婚禮上,老公的妹妹穿的比我還像新娘宪祥。我一直安慰自己聂薪,他們只是感情好家乘,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藏澳,像睡著了一般仁锯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翔悠,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天业崖,我揣著相機與錄音,去河邊找鬼蓄愁。 笑死腻要,一個胖子當著我的面吹牛,可吹牛的內容都是我干的涝登。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼效诅,長吁一口氣:“原來是場噩夢啊……” “哼胀滚!你這毒婦竟也來了?” 一聲冷哼從身側響起乱投,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤咽笼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戚炫,有當地人在樹林里發(fā)現(xiàn)了一具尸體剑刑,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年双肤,在試婚紗的時候發(fā)現(xiàn)自己被綠了施掏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡茅糜,死狀恐怖七芭,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蔑赘,我是刑警寧澤狸驳,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站缩赛,受9級特大地震影響耙箍,放射性物質發(fā)生泄漏。R本人自食惡果不足惜酥馍,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一辩昆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧物喷,春花似錦卤材、人聲如沸遮斥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽术吗。三九已至,卻和暖如春帆精,著一層夾襖步出監(jiān)牢的瞬間较屿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工卓练, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隘蝎,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓襟企,卻偏偏與公主長得像嘱么,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子顽悼,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理曼振,服務發(fā)現(xiàn),斷路器蔚龙,智...
    卡卡羅2017閱讀 134,711評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法冰评,類相關的語法,內部類的語法木羹,繼承相關的語法甲雅,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • //我所經歷的大數據平臺發(fā)展史(三):互聯(lián)網時代 ? 上篇http://www.infoq.com/cn/arti...
    葡萄喃喃囈語閱讀 51,236評論 10 200
  • 直到現(xiàn)在我還清楚地記得坑填,當初的我是什么樣子抛人。 我很想和她聊點什么,可是又怕被她煩(哈哈穷遂,打擾這個詞函匕,我好久都不用了...
    歸處的美男子閱讀 103評論 0 0
  • A.我病因素已經消除或不起作用B.疾病時發(fā)生的損傷性變化完全治失 D.機體的自穩(wěn)調節(jié)恢復正常 完全恢復 C.勞動能...
    撒哈哈哈閱讀 844評論 0 0