iOS實(shí)現(xiàn)聯(lián)系人列表功能
本文實(shí)例為大家分享了iOS實(shí)現(xiàn)聯(lián)系人列表功能的具體代碼,供大家參考,具體內(nèi)容如下
按照順序排列聯(lián)系人列表,需要引入一些工具(詳見(jiàn)demo):

主要部分代碼:
#import "LinkMan.h"
#import "LinkmanCell.h"
#import "LinkmanSelectCell.h"
#import "pinyin.h"
#import "ChineseString.h"
@interface LinkMan ()<UISearchBarDelegate,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UILabel *titleLab; //標(biāo)題
@property (weak, nonatomic) IBOutlet UIView *titleView; //標(biāo)題欄
@property (weak, nonatomic) IBOutlet UITableView*gTableView; //聯(lián)系人TV
@property (weak, nonatomic) IBOutlet UIButton *sureBut; //確定
@property (nonatomic ,strong) NSMutableArray *gPeopleArr; //一級(jí)聯(lián)系人
@property (nonatomic ,strong) NSMutableArray *gMarkKeyArr; //標(biāo)識(shí)
@property (nonatomic ,strong) NSMutableArray *gLinkManArr; //二級(jí)聯(lián)系人
@end
@implementation LinkMan
@synthesize gTableView;
@synthesize gPeopleArr;
@synthesize gLinkManArr;
@synthesize gMarkKeyArr;
-(void)dealloc{
gPeopleArr = nil;
gMarkKeyArr = nil;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//清空選擇聯(lián)系人
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
[userInfoDefaults setObject:nil forKey:@"linkmanSelectList"];
[userInfoDefaults synchronize];
//標(biāo)題欄
[self cTitleBar];
//右側(cè)選擇欄
gMarkKeyArr = [[NSMutableArray alloc] init];
gPeopleArr = [[NSMutableArray alloc] init];
gLinkManArr = [[NSMutableArray alloc] init];
//網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求
[self cNetWorkLinkman];
}
//標(biāo)題欄
-(void)cTitleBar{
int ver = [[[UIDevice currentDevice] systemVersion] intValue];
float height = 44;
if(ver >= 7){
height = 64;
}
CGRect titleRect = _titleView.frame;
titleRect.size.height = height;
[_titleView setFrame:titleRect];
}
//返回
- (IBAction)returnAction:(id)sender {
//聯(lián)系人可多選
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
[userInfoDefaults setObject:@"0" forKey:@"linkmanSelect"];
[userInfoDefaults synchronize];
//二級(jí)
if(gLinkManArr.count > 0){
[gLinkManArr removeAllObjects];
[_titleLab setText:@"聯(lián)系人"];
[gTableView reloadData];
}else{//一級(jí)
NSUserDefaults *noneDefaults = [NSUserDefaults standardUserDefaults];
[noneDefaults setObject:@"1" forKey:@"noneproject"];
[noneDefaults synchronize];
[self.navigationController popViewControllerAnimated:YES ];
}
}
//按照拼音首字母排序
- (NSMutableArray *)getChineseStringArr:(NSMutableArray *)arrToSort {
NSMutableArray *chineseStringsArray = [NSMutableArray array];
for(int i = 0; i < [arrToSort count]; i++) {
ChineseString *chineseString=[[ChineseString alloc]init];
NSDictionary *tempDict = (NSDictionary *)[arrToSort objectAtIndex:i];
chineseString.string=[NSString stringWithString:[tempDict objectForKey:@"name"]];
chineseString.pID = [NSString stringWithString:[tempDict objectForKey:@"id"]];
if(chineseString.string==nil){
chineseString.string=@"";
}
if(![chineseString.string isEqualToString:@""]){
//join the pinYin
NSString *pinYinResult = [NSString string];
for(int j = 0;j < chineseString.string.length; j++) {
NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",
pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];
}
chineseString.pinYin = pinYinResult;
} else {
chineseString.pinYin = @"";
}
[chineseStringsArray addObject:chineseString];
// [chineseString release];
}
//sort the ChineseStringArr by pinYin 拼音排序
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
[chineseStringsArray sortUsingDescriptors:sortDescriptors];
NSMutableArray *arrayForArrays = [NSMutableArray array];
BOOL checkValueAtIndex= NO; //flag to check
NSMutableArray *TempArrForGrouping = nil;
[gMarkKeyArr removeAllObjects];
for(int index = 0; index < [chineseStringsArray count]; index++)
{
ChineseString *chineseStr = (ChineseString *)[chineseStringsArray objectAtIndex:index];
NSMutableString *strchar= [NSMutableString stringWithString:chineseStr.pinYin];
NSString *sr= [strchar substringToIndex:1];
if(![gMarkKeyArr containsObject:[sr uppercaseString]])//在這里我檢查字符是否已經(jīng)選擇頭鍵
{
[gMarkKeyArr addObject:[sr uppercaseString]];
TempArrForGrouping = [[NSMutableArray alloc] initWithObjects:nil];
checkValueAtIndex = NO;
}
if([gMarkKeyArr containsObject:[sr uppercaseString]])
{
[TempArrForGrouping addObject:[chineseStringsArray objectAtIndex:index]];
if(checkValueAtIndex == NO)
{
[arrayForArrays addObject:TempArrForGrouping];
checkValueAtIndex = YES;
}
}
}
return arrayForArrays;
}
//數(shù)據(jù)準(zhǔn)備
-(NSMutableDictionary *)linkmanAction:(NSMutableDictionary *)listDict{
NSMutableArray *branchPersonArr = [[NSMutableArray alloc] init];
for (int k = 1; k < 20; k ++) {
NSMutableDictionary *branchPersonDict = [[NSMutableDictionary alloc] init];
NSInteger arcRandom = arc4random()%1000;
[branchPersonDict setObject:[NSString stringWithFormat:@"%d",arcRandom*k] forKey:@"id"];
[branchPersonDict setObject:[NSString stringWithFormat:@"%d",arcRandom*k] forKey:@"name"];
NSMutableArray *branchArr = [[NSMutableArray alloc] init];
for (int i = 1; i < 20; i ++) {
NSMutableDictionary *branchDict = [[NSMutableDictionary alloc] init];
NSInteger arcRandom = arc4random()%10000 + 10000;
[branchDict setObject:[NSString stringWithFormat:@"%d",arcRandom*i] forKey:@"id"];
[branchDict setObject:[NSString stringWithFormat:@"%d",arcRandom*i] forKey:@"name"];
[branchDict setObject:@"110" forKey:@"phone"];
[branchDict setObject:@"" forKey:@"header"];
[branchArr addObject:branchDict];
}
[branchPersonDict setObject:branchArr forKey:@"member"];
[branchPersonArr addObject:branchPersonDict];
}
[listDict setObject:branchPersonArr forKey:@"branch"];
return listDict;
}
//網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求
-(void)cNetWorkLinkman{
NSMutableDictionary *listDict = [[NSMutableDictionary alloc] init];
listDict = [self linkmanAction:listDict];
NSArray *branchArr = [listDict objectForKey:@"branch"];
NSArray *projectArr;
NSMutableArray *tempArr = [branchArr mutableCopy];
for (int j = 0; j <projectArr.count; j ++) {
NSDictionary *prodict = [projectArr objectAtIndex:j];
[tempArr addObject:prodict];
}
//從網(wǎng)絡(luò)接口獲取數(shù)據(jù)
if(listDict){
//聯(lián)系人列表
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
[userInfoDefaults setObject:[self chineseStringArr:tempArr] forKey:@"linkmanList"];
[userInfoDefaults synchronize];
[gTableView reloadData];
}
}
//幾組
- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
if(gLinkManArr.count > 0){//二級(jí)
if(gLinkManArr!=nil && gLinkManArr.count > 0){
gLinkManArr = [self getChineseStringArr:gLinkManArr];
return gLinkManArr.count;
}
}else{//一級(jí)
[_titleLab setText:@"聯(lián)系人"];
//聯(lián)系人列表
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *linkmanMarr = [userInfoDefaults objectForKey:@"linkmanList"];
if(linkmanMarr!=nil && linkmanMarr.count > 0){
gPeopleArr = [self getChineseStringArr:linkmanMarr];
return gPeopleArr.count;
}
}
return 0;
}
//幾行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
[_sureBut setHidden:YES];
if(gLinkManArr.count > 0){//二級(jí)
[_sureBut setHidden:NO];
NSArray *temp = [gLinkManArr objectAtIndex:section];
return temp.count;
}else{//一級(jí)
//聯(lián)系人列表
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *linkmanMarr = [userInfoDefaults objectForKey:@"linkmanList"];
if(linkmanMarr!=nil && linkmanMarr.count > 0){
//聯(lián)系人狀態(tài)
gPeopleArr = [self getChineseStringArr:linkmanMarr];
NSArray *temp = [gPeopleArr objectAtIndex:section];
return temp.count;
}
}
return 0;
}
//*字母排序搜索
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
return gMarkKeyArr;
}
//搜索時(shí)顯示按索引第幾組
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
NSInteger count = 0;
for(NSString *character in gMarkKeyArr){
if([character isEqualToString:title]){
return count;
}
count ++;
}
return count;
}
//標(biāo)頭
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [gMarkKeyArr objectAtIndex:section];
}
//TableView賦值
- (UITableViewCell *)tableView:(UITableView *)tableview cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//聯(lián)系人可多選
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
NSString *linkmanSelect = [userInfoDefaults objectForKey:@"linkmanSelect"];
if([linkmanSelect isEqualToString:@"1"]){
static NSString *cellIdentifier=@"LinkmanSelectCell";
LinkmanSelectCell *cell=[tableview dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = (LinkmanSelectCell*)[[[NSBundle mainBundle] loadNibNamed:@"LinkmanSelectCell" owner:nil options:nil] objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.backgroundColor=[UIColor clearColor];
[cell setClipsToBounds:YES];
//二級(jí)
if(gLinkManArr.count > 0){
if(gLinkManArr.count > indexPath.section){
NSArray *onegp = [gLinkManArr objectAtIndex:indexPath.section];
ChineseString *strLinkMan = [onegp objectAtIndex:indexPath.row];
[cell cSetValueID:strLinkMan.pID andLinkMan:strLinkMan.string andBranch:@"" andPhoneNum:nil];
}else{
[cell cSetValueID:@"" andLinkMan:@"" andBranch:@"" andPhoneNum:nil];
}
}else{//一級(jí)
if(gPeopleArr.count > indexPath.section){
NSArray *onegp = [gPeopleArr objectAtIndex:indexPath.section];
ChineseString *strLinkMan = [onegp objectAtIndex:indexPath.row];
[cell cSetValueID:strLinkMan.pID andLinkMan:strLinkMan.string andBranch:@"" andPhoneNum:nil];
}else{
[cell cSetValueID:@"" andLinkMan:@"" andBranch:@"" andPhoneNum:nil];
}
}
return cell;
}else{
static NSString *cellIdentifier=@"LinkmanCell";
LinkmanCell *cell=[tableview dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = (LinkmanCell*)[[[NSBundle mainBundle] loadNibNamed:@"LinkmanCell" owner:nil options:nil] objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.backgroundColor=[UIColor clearColor];
[cell setClipsToBounds:YES];
//二級(jí)
if(gLinkManArr.count > 0){
if(gLinkManArr.count > indexPath.section){
NSArray *onegp = [gLinkManArr objectAtIndex:indexPath.section];
ChineseString *strLinkMan = [onegp objectAtIndex:indexPath.row];
[cell cSetValueID:strLinkMan.pID andLinkMan:strLinkMan.string andBranch:@"" andPhoneNum:nil];
}else{
[cell cSetValueID:@"" andLinkMan:@"" andBranch:@"" andPhoneNum:nil];
}
}else{//一級(jí)
if(gPeopleArr.count > indexPath.section){
NSArray *onegp = [gPeopleArr objectAtIndex:indexPath.section];
ChineseString *strLinkMan = [onegp objectAtIndex:indexPath.row];
[cell cSetValueID:strLinkMan.pID andLinkMan:strLinkMan.string andBranch:@"" andPhoneNum:nil];
}else{
[cell cSetValueID:@"" andLinkMan:@"" andBranch:@"" andPhoneNum:nil];
}
}
return cell;
}
}
//選中時(shí)執(zhí)行的操作
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self.view endEditing:YES];
LinkmanCell *tempCell = (LinkmanCell *)[tableView cellForRowAtIndexPath:indexPath];
//二級(jí)
if(gLinkManArr.count > 0){
}else{//一級(jí)
NSInteger theIndex = 0;
for (int i = 0; i <= indexPath.section ; i ++) {
NSArray *tempPeoArr = [gPeopleArr objectAtIndex:i];
if(i == indexPath.section){
theIndex = theIndex + indexPath.row;
}else{
theIndex = theIndex + tempPeoArr.count;
}
}
//聯(lián)系人列表
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *linkmanMarr = [userInfoDefaults objectForKey:@"linkmanList"];
NSDictionary *linkmanDict;
if(linkmanMarr.count > theIndex){
linkmanDict = [linkmanMarr objectAtIndex:theIndex];
}else{
return;
}
NSArray *linkArr = [linkmanDict objectForKey:@"member"];
if(linkArr.count > 0){
gLinkManArr = [linkArr mutableCopy];
[_titleLab setText:tempCell.gLinkMan.text];
//聯(lián)系人可多選
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
[userInfoDefaults setObject:@"1" forKey:@"linkmanSelect"];
[userInfoDefaults synchronize];
[gTableView reloadData];
}
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 44.0;
}
//UITableViewDelegate,UITableViewDataSource
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(CGFLOAT_MIN, CGFLOAT_MIN, CGFLOAT_MIN, 22)];
[tempView setBackgroundColor:[UIColor colorWithRed:248.0/255 green:248.0/255 blue:248.0/255 alpha:1]];
UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 100, 22)];
[titleLab setBackgroundColor:[UIColor clearColor]];
if(gMarkKeyArr.count > section){
[titleLab setText:[gMarkKeyArr objectAtIndex:section]];
}else{
[titleLab setText:@""];
}
[titleLab setTextColor:[UIColor colorWithRed:34.0/255 green:34.0/255 blue:34.0/255 alpha:1]];
[titleLab setFont:[UIFont boldSystemFontOfSize:17]];
[tempView addSubview:titleLab];
return tempView;
}
//按照拼音首字母排序
- (NSMutableArray *)chineseStringArr:(NSMutableArray *)arrToSort {
NSMutableArray *chineseStringsArray = [NSMutableArray array];
for(int i = 0; i < [arrToSort count]; i++) {
ChineseString *chineseString=[[ChineseString alloc]init];
NSDictionary *tempDict = (NSDictionary *)[arrToSort objectAtIndex:i];
chineseString.string=[NSString stringWithString:[tempDict objectForKey:@"name"]];
chineseString.pID = [NSString stringWithString:[tempDict objectForKey:@"id"]];
//chineseString.bID = [NSString stringWithString:[tempDict objectForKey:@"bid"]];
if(chineseString.string==nil){
chineseString.string=@"";
}
if(![chineseString.string isEqualToString:@""]){
//join the pinYin
NSString *pinYinResult = [NSString string];
for(int j = 0;j < chineseString.string.length; j++) {
NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",
pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];
}
chineseString.pinYin = pinYinResult;
} else {
chineseString.pinYin = @"";
}
[chineseStringsArray addObject:chineseString];
// [chineseString release];
}
//sort the ChineseStringArr by pinYin 拼音排序
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
[chineseStringsArray sortUsingDescriptors:sortDescriptors];
NSMutableArray *arrayForArrays = [[NSMutableArray alloc]init];
for (int i = 0; i < chineseStringsArray.count ; i ++) {
ChineseString *tempChinese = [chineseStringsArray objectAtIndex:i];
NSString *chineseName = tempChinese.string;
for (int j = 0; j < arrToSort.count ; j ++) {
NSDictionary *tempSortDict = [arrToSort objectAtIndex:j];
NSString *sortName = [tempSortDict objectForKey:@"name"];
if([chineseName isEqualToString:sortName]){
[arrayForArrays addObject:tempSortDict];
}
}
}
return arrayForArrays;
}
//確定
- (IBAction)sureAction:(id)sender {
//已選擇聯(lián)系人
NSUserDefaults *userInfoDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *selectList = [userInfoDefaults objectForKey:@"linkmanSelectList"];
if(selectList != nil){
NSString *messageStr = [NSString stringWithFormat:@"您選擇了%d個(gè)對(duì)象",selectList.count];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:messageStr delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
[alert show];
[userInfoDefaults setObject:nil forKey:@"linkmanSelectList"];
[userInfoDefaults synchronize];
}
}
@end
Demo:iOS實(shí)現(xiàn)聯(lián)系人列表
示圖:


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- IOS實(shí)現(xiàn)展開(kāi)二級(jí)列表效果
- IOS展開(kāi)三級(jí)列表效果示例
- iOS多級(jí)列表實(shí)現(xiàn)代碼
- IOS實(shí)現(xiàn)簡(jiǎn)易版的QQ下拉列表
- iOS開(kāi)發(fā)之在列表上方添加水印的方法
- iOS 標(biāo)簽Tag列表的實(shí)現(xiàn)代碼
- ios基于UITableViewController實(shí)現(xiàn)列表
- iOS實(shí)現(xiàn)列表折疊效果
- iOS列表上拉(平滑加載數(shù)據(jù))自動(dòng)加載數(shù)據(jù)的問(wèn)題解決
- iOS實(shí)現(xiàn)從通訊錄中選擇聯(lián)系人
相關(guān)文章
iOS實(shí)現(xiàn)電商購(gòu)物車界面示例
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)一個(gè)類似電商購(gòu)物車界面示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Framework中實(shí)現(xiàn)OC和Swift的混編方案
這篇文章主要為大家介紹了Framework中實(shí)現(xiàn)OC和Swift的混編方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
基于UIControl控件實(shí)現(xiàn)ios點(diǎn)贊功能
在開(kāi)發(fā)當(dāng)中,可能很多時(shí)候都需要做個(gè)點(diǎn)贊的需求,如果用按鈕實(shí)現(xiàn),按鈕作為一個(gè)系統(tǒng)復(fù)合控件,外部是一個(gè) View--》UIControl的容器,本文給大家分享一個(gè)基于UIControl控件實(shí)現(xiàn)ios點(diǎn)贊功能,需要的朋友可以參考下2015-09-09
iOS實(shí)現(xiàn)手機(jī)獲取驗(yàn)證碼倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)手機(jī)獲取驗(yàn)證碼倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
iOS UIBezierPath實(shí)現(xiàn)餅狀圖
這篇文章主要為大家詳細(xì)介紹了iOS UIBezierPath實(shí)現(xiàn)餅狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
IOS NSUserDefault 記住用戶名及密碼功能的實(shí)例代碼
這篇文章主要介紹了IOS NSUserDefault 記住用戶名及密碼功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09
iOS開(kāi)發(fā)使用GDataXML框架解析網(wǎng)絡(luò)數(shù)據(jù)
GDataXML是Google開(kāi)發(fā)的一個(gè)XML解析庫(kù),輕便,特點(diǎn)使用非常簡(jiǎn)單,支持XPath。今天把前兩天弄的IOS XML解析記錄下來(lái),也供大家參考。2016-02-02
IOS開(kāi)發(fā)之由身份證號(hào)碼提取性別的實(shí)現(xiàn)代碼
這篇文章主要介紹了IOS開(kāi)發(fā)之由身份證號(hào)碼提取性別的實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
iOS如何獲取漢字(簡(jiǎn)體中文)筆畫(huà)數(shù)詳解
這篇文章主要給大家介紹了關(guān)于iOS如何獲取漢字(簡(jiǎn)體中文)筆畫(huà)數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02

