IOS之通訊錄開發(fā)(附Demo)

目錄

 1郎汪、集成
 2、Xcode8.0之后的權限添加(否則上架不允許)
 3烈拒、通訊錄數(shù)據獲取
 4乳乌、通訊錄數(shù)據排序
 5器躏、searchBar實現(xiàn)模糊查詢
 6、小節(jié)

1、集成

#import <ContactsUI/ContactsUI.h>     頭文件的導入

2、Xcode8.0之后的限定(否則上架不允許)

info.plist
 Privacy - Contacts Usage Description -> 通訊錄權限

3磺平、通訊錄數(shù)據獲取

- (void)contactsUI{
    CNAuthorizationStatus authorizationStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
    if (authorizationStatus == CNAuthorizationStatusAuthorized) {
        NSLog(@"沒有授權...");
    }
    
    // 獲取指定的字段,并不是要獲取所有字段,需要指定具體的字段
    NSArray *keysToFetch = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey];
    CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch];
    CNContactStore *contactStore = [[CNContactStore alloc] init];
    [contactStore enumerateContactsWithFetchRequest:fetchRequest error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
        
        self.contactsDic = [NSMutableDictionary dictionary];
        NSLog(@"-------------------------------------------------------");
        NSString *givenName = contact.givenName;
        NSString *familyName = contact.familyName;
        NSLog(@"givenName=%@, familyName=%@", givenName, familyName);
        [self.contactsDic setObject:familyName forKey:@"familName"];
        
        NSArray *phoneNumbers = contact.phoneNumbers;
        for (CNLabeledValue *labelValue in phoneNumbers) {
            NSString *label = labelValue.label;
            CNPhoneNumber *phoneNumber = labelValue.value;
            [self.contactsDic setObject:phoneNumber.stringValue forKey:@"phoneNumber"];
            NSLog(@"label=%@, phone=%@", label, phoneNumber.stringValue);
        }
        
        NSLog(@"%@",self.contactsDic);
        [self.contactsSource addObject:self.contactsDic];
        //        *stop = YES;  // 停止循環(huán)拐辽,相當于break拣挪;
    }];
    NSLog(@"%ld",self.contactsSource.count);
    NSLog(@"%@",self.contactsSource);
    //根據Person對象的 name 屬性 按中文 對 Person數(shù)組 排序
    self.indexArray = [BMChineseSort IndexWithArray:self.contactsSource Key:@"familName"];
    NSLog(@"%@",self.indexArray);
    
    
    for (int i = 0; i < self.contactsSource.count; i++) {
        
        constantModel *model = [[constantModel alloc] initWithDict:self.contactsSource[i]];
        [self.contactsSourceList addObject:model];
    }
    self.letterResultArr = [BMChineseSort sortObjectArray:self.contactsSourceList Key:@"familName"];
    NSLog(@"%@",self.letterResultArr);
    [self.mainTableView reloadData];
}

(1)上面的代碼我們可以看到---Block回調當中的contact下會有很多屬性(我這里只抓取了familyName和phoneNumber 也就是昵稱和電話).
(2)familyName直接就可以"."出來。而phoneNumber我們是通過再遍歷數(shù)組取到的俱诸。
(3)那么取到之后我們將這兩個對象分別放在字典當中菠劝,再將字典放在數(shù)組當中,從而實現(xiàn)這樣一個集合(self.contactsSource).
(4)我們又將這個集合通過轉換model的形式轉換為了Model類型睁搭,從而實現(xiàn)在cell上的賦值赶诊。
通過以上四步我們實現(xiàn)了對通訊錄數(shù)組的賦值---效果如圖

效果圖

4、通訊錄數(shù)據排序

1介袜、說到排序甫何,我們又重新創(chuàng)建了兩個數(shù)組
//排序后的出現(xiàn)過的拼音首字母數(shù)組
@property(nonatomic,strong)NSMutableArray *indexArray;
//排序好的結果數(shù)組
@property(nonatomic,strong)NSMutableArray *letterResultArr;

分別是排序好字母的數(shù)組(來作為section的頭) 
按照首字母排序好的數(shù)組(來作為每個section的row)

2出吹、獲取到之后遇伞,重新按照對象-->model的形式,再次賦值到cell上即可捶牢。

5鸠珠、searchBar實現(xiàn)模糊查詢

說到searchBar這里不對SearchBar進行詳解巍耗。只說幾個常用的代理--

(1)首先要實現(xiàn)<UISearchBarDelegate,UISearchDisplayDelegate>兩個協(xié)議

(2)實現(xiàn)代理方法

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    NSLog(@"begin");
    return YES;
}

-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    NSLog(@"end");
    return  YES;
}
#pragma mark ----------------UISearchDisplayDelegate---------------------
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"%@",self.contactsSource);
    self.searchModelResultArray = [NSMutableArray array];
//    /**通過謂詞修飾的方式來查找包含我們搜索關鍵字的數(shù)據*/
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.familName CONTAINS[cd] %@",searchString];
    NSLog(@"%@",predicate);
    self.searchResultArray = [[self.contactsSource filteredArrayUsingPredicate:predicate]mutableCopy];
    NSLog(@"%@",self.searchResultArray);
    
    for (int i = 0; i < self.searchResultArray.count; i++) {
        
        constantModel *model = [[constantModel alloc] initWithDict:self.searchResultArray[i]];
        [self.searchModelResultArray addObject:model];
    }
    NSLog(@"%@",self.searchModelResultArray);
    return  YES;
}

(3) 最重要的還是要實現(xiàn)UISearchDisplayDelegate中的代理方法我們需要創(chuàng)建一個UISearchDisplayController的控制器。

@property (nonatomic, strong) UISearchDisplayController *displayer;

(4)然后我們我們需要看下渐排,在UISearchDisplayDelegate的代理中我們具體實現(xiàn)了什么炬太,這里我們使用了NSPredicate(作為篩選工具 蘋果自帶的 )想看詳情點這里傳送門
(5)我們將篩選過后的數(shù)組還是按照. 對象轉模型(model)的方式再次賦值到Cell上完成這波操作。驯耻。效果圖如下亲族。

效果圖

小結----- >

通訊錄Demo

代碼都是基本操作,希望能幫到你可缚。喜歡的話請點贊霎迫。。帘靡。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末知给,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子描姚,更是在濱河造成了極大的恐慌涩赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轩勘,死亡現(xiàn)場離奇詭異筒扒,居然都是意外死亡,警方通過查閱死者的電腦和手機绊寻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門霎肯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榛斯,你說我怎么就攤上這事观游。” “怎么了驮俗?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵懂缕,是天一觀的道長。 經常有香客問我王凑,道長搪柑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任索烹,我火速辦了婚禮工碾,結果婚禮上,老公的妹妹穿的比我還像新娘百姓。我一直安慰自己渊额,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旬迹,像睡著了一般火惊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奔垦,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天屹耐,我揣著相機與錄音,去河邊找鬼椿猎。 笑死惶岭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的犯眠。 我是一名探鬼主播俗他,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阔逼!你這毒婦竟也來了兆衅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嗜浮,失蹤者是張志新(化名)和其女友劉穎羡亩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體危融,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡畏铆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吉殃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辞居。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛋勺,靈堂內的尸體忽然破棺而出瓦灶,到底是詐尸還是另有隱情,我是刑警寧澤抱完,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布贼陶,位于F島的核電站,受9級特大地震影響巧娱,放射性物質發(fā)生泄漏碉怔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一禁添、第九天 我趴在偏房一處隱蔽的房頂上張望撮胧。 院中可真熱鬧,春花似錦老翘、人聲如沸芹啥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叁征。三九已至纳账,卻和暖如春逛薇,著一層夾襖步出監(jiān)牢的瞬間捺疼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工永罚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啤呼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓呢袱,卻偏偏與公主長得像官扣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羞福,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件惕蹄,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,051評論 3 38
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫治专、插件卖陵、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 在線聊天時,經常能看到對方"正在輸入"的字樣吧张峰?面對這幾個字泪蔫,你會怎么想呢? 我想喘批,應該概括一下撩荣,大致有以下幾種情...
    雨果的天空閱讀 1,830評論 4 2
  • 寒冬凜冽的寒風吹打著這座城市的樹木,阿恒走在街邊不自覺的裹緊了大衣饶深。 “阿恒餐曹,新年快樂,希望你越長越胖敌厘!”電話那邊...
    廿易閱讀 447評論 4 4
  • 不要執(zhí)迷不悟凸主,其實你一開始就已經知道結局了不是嗎,你一開始就知道這是個錯誤不是嗎额湘,你一再地忍讓一再妥協(xié)自己...
    林若弦閱讀 708評論 0 0