iOS 通訊錄手機(jī)號選擇問題

需求

  • 由于之前使用第三方跳轉(zhuǎn)通訊錄,點(diǎn)擊聯(lián)系人默認(rèn)獲取第一個手機(jī)號,現(xiàn)在需要根據(jù)聯(lián)系人的手機(jī)號數(shù)量,只有1個,點(diǎn)擊該聯(lián)系人后直接dimiss,如果數(shù)量大于1,需要跳轉(zhuǎn)至聯(lián)系人詳情進(jìn)行選擇后dismiss。

前提

未解決前方案

  • 如果您已了解AddressBook框架,話不多說上代碼:
    #import <AddressBook/ABPerson.h>
    #import <AddressBookUI/AddressBookUI.h>
  • 點(diǎn)擊跳轉(zhuǎn)通訊錄的事件
- (void)btnClick{
  //聯(lián)系人選擇控制器
 ABPeoplePickerNavigationController *nav = [[ABPeoplePickerNavigationController alloc]init];
//設(shè)置代理 ABPeoplePickerNavigationControllerDelegate
    nav.peoplePickerDelegate =self;
//彈出視圖
    [self presentViewController:nav animated:YES completion:nil];
}
  • 代理
    系統(tǒng)方案實(shí)現(xiàn)有兩個代理:
    1.實(shí)現(xiàn)peoplePickerNavigationController:didSelectPerson:
    2.實(shí)現(xiàn)peoplePickerNavigationController:didSelectPerson: property:identifier:(ABMultiValueIdentifier)identifier
    該方法在8以后,是直接跳轉(zhuǎn)詳情頁,不實(shí)現(xiàn),就會直接走第一種方案。
//ios 7 方法
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person{
    ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty);
    
    NSString *personName = (__bridge_transfer NSString *) ABRecordCopyCompositeName(person);
    NSLog(@"%@", personName);
    
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
    NSString *phoneNo = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phones, 0);
//遍歷拿到所有的phonenumber,當(dāng)前取第0個
//    for (NSUInteger phoneCounter = 0; phoneCounter < ABMultiValueGetCount(phones); phoneCounter++)
//    {
//        
//        phoneNo = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phones, phoneCounter);
//        
//        NSLog(@"phone : %@",phoneNo);
//        
//    }
    
    if ([phoneNo hasPrefix:@"+"]) {
        
        phoneNo = [phoneNo substringFromIndex:3];
    }
    
    phoneNo = [phoneNo stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSLog(@"%@", phoneNo);
    
    if (phone && personName) {
        [peoplePicker dismissViewControllerAnimated:YES completion:nil];
        return;
    }
}
//ios 8 以上
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{
    ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty);
    long index = ABMultiValueGetIndexForIdentifier(phone, identifier);
    
    NSString *phoneNo = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phone, index);
    
    NSString *personName = (__bridge_transfer NSString *) ABRecordCopyCompositeName(person);
    NSLog(@"%@", personName);
    
    if ([phoneNo hasPrefix:@"+"]) {
        
        phoneNo = [phoneNo substringFromIndex:3];
    }
    
    phoneNo = [phoneNo stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSLog(@"%@", phoneNo);
    
    if (phone && personName) {
        [peoplePicker dismissViewControllerAnimated:YES completion:nil];
        return;
    }
    
}

上述方法,直接走第一種代理。
重點(diǎn)來了!

- (void)btnClick{
  //聯(lián)系人選擇控制器
 ABPeoplePickerNavigationController *nav = [[ABPeoplePickerNavigationController alloc]init];
//設(shè)置代理 ABPeoplePickerNavigationControllerDelegate
nav.peoplePickerDelegate =self;
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
        nav.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:false];
}
//彈出視圖
    [self presentViewController:nav animated:YES completion:nil];
}
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
        nav.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:false];
}

加上這一段話后,可實(shí)現(xiàn),在iOS8以上,點(diǎn)擊聯(lián)系人跳轉(zhuǎn)到詳情頁。
但是還是沒有按照需求實(shí)現(xiàn)!

解決方案

if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
        nav.predicateForSelectionOfPerson = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];
}

正確的NSPredicate(謂詞)篩選,達(dá)到了所需效果。此方法適用iOS8以上。

不詳盡的地方請留言指出,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,060評論 4 61
  • 雨 一 直下
    漫步者yt閱讀 190評論 0 0
  • 不怕千萬人阻擋,只怕自己投降 曾對自己許下過無數(shù)的愿望,一定要怎樣怎樣,可是堅持,放棄,放棄,堅持,到最后一事無成...
    月非寒不寒閱讀 764評論 0 0
  • 1、一流人物珍惜能量,并不是珍惜時間,老虎就像睡著,鷹就像枯萎,人需要用自己的能量去做最關(guān)鍵的事情。 2、看東西之...
    智囊團(tuán)閱讀 191評論 0 0
  • 今天是星期五,中午拿飯進(jìn)來的時候我被前排的小排頭絆倒了,磕到膝蓋了是我同桌幫我扶起來的,那個害我摔倒的同學(xué)都沒跟我...
    趙正源的日記閱讀 324評論 0 1

友情鏈接更多精彩內(nèi)容