iOS通讯录的简单实现

      本文是基于UITableView实现一个简单的通讯录,支持滑动删除与标记星标好友以及索引功能。作为iOS开发者我相信大家对UITableView的使用已经相当熟练了,关于UITableView的基本使用我这里就不再赘述了。

1.处理数据源数据

     一般当我们从后台请求数据返回的结果可能是乱序的,我们这里需要实现索引功能,所以第一步应该提取每一个联系人姓名的首字母,当然有时候也可能是我们随便输入的,他有可能是字母,数字或者表情符号。iOS 系统已经给出了将汉字转化为拼音的方法,我们再将首字母提取出来即可。

//先转换为带声调的拼音

CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);

//再转换为不带声调的拼音

CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);

当然上述方法并不是万能的,在天朝博大精深的文化面前偶尔会显得尴尬,当汉字是多音字时就会出问题。大家都知道汉字在作为姓氏时,它的读音会与汉字原有的读音不同。这个时候就需要我们自己做出矫正.

NSArray * chinacese = @[@"区",@"查",@"曾",@"晟",@"单",@"乐",@"仇",@"尉",@"沈"];

NSArray * pinYin = @[@"ou",@"zha",@"zeng",@"cheng",@"shan",@"yue",@"qiu",@"yu",@"shen"];

for (NSInteger i = 0; i

if ([[(NSString *)aString substringToIndex:1] compare:chinacese[i]] == NSOrderedSame) {

NSArray * arr = [str componentsSeparatedByString:@" "];

if (arr.count) {

[str replaceCharactersInRange:NSMakeRange(0, [arr[0] length]) withString:pinYin[i]];

break;

}

}

}

上述是小编百度的一些汉字作为姓氏时读音与汉字本身的读音首字母不同时的一些汉字,有可能不全面希望大家补充一下。话说当时小编忽略了多音字问题,写好程序后,兴致勃勃的随便编了一堆名字,然后放到程序里运行,结果发现“沈佳宜”被放到了C开头的分组里,一开始小编以为是自己写的程序有bug,后来debug发现“沈佳宜”转化成拼音后变成了“chen jia yi”,后来又测试了“沈阳”出来的是“sheng yang”。这时候我以为是iOS系统有问题。这时候我开始怀疑人生了。后来我又百度了“沈”的发音,竟然还有“chen”这个发音。看来iOS还是对多音字进行了一些适配的但是作为名字的时候它就不那么准确了。

然后我们提取出汉字首字母,将首字母相同的联系人归为一类,不是字母的归为#号类,这里大家可以自己写一个归类的方法,当然我后面会贴出demo的地址大家可以参考。

2.UITableView的代理方法实现滑动效果以及索引

//返回索引数组

-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

return _indexs;

}

这个方法是实现索引的代理方法,我们只需要返回给系统包含你所有的索引的字符串的数组就可以了

- (NSArray*)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

Friend * friend  = self.dataSource[indexPath.section][indexPath.row];

// 添加一个删除按钮

UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除"handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

NSLog(@"点击了删除");

[self deleteFriend:friend];

}];

// 添加星标好友按钮或者删除星标好友

NSString * title;

if (friend) {

if (friend.starFriend) {

title = @"取消星标好友";

}else{

title = @"添加星标好友";

}

}

UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:title handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

NSLog(@"星标按钮");

if (friend.starFriend) {

//取消星标好友操作

[self cancleStarFriend:friend];

}else{

//添加星标好友操作

[self addStarFriend:friend];

}

}];

topRowAction.backgroundColor = [UIColor orangeColor];

// 将设置好的按钮放到数组中返回

return @[deleteRowAction, topRowAction];

}

上面的这个方法是为UITableView添加滑动事件的方法,它的返回也是一个数组,说明可以添加多个事件。

这里是Demo 的下载地址,不足之处希望大家多多指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容