码迷,mamicode.com
首页 > 移动开发 > 详细

ios 汉字转拼音

时间:2015-07-30 17:14:01      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:ios   汉字转拼音   

 其中用到PinYin4Objc第三方    下载地址:    https://github.com/kimziv/PinYin4Objc

          

项目中的实际应用

项目需求:

显示一个班级的成员列表,有一个是管理员要排在最上面,下面按照拼音排序实现索引列表,效果图如下:

 技术分享

代码实现过程

查询数据库获取成员列表

技术分享
1 //成员列表根据 isAdmin 字段进行排序查询——order by isAdmin
2 NSMutableArray *members = [[ASMemberDao sharedInstance] queryAllMembersByGroupId:groupId];
3 //根据排序查询结果第一个为管理员
4 ASContact *memeberAdmin = [members objectAtIndex:0];

将每个成员的名字转化成拼音

技术分享
技术分享
 1 //初始化HanyuPinyinOutputFormat对象,设置相应的 type
 2 HanyuPinyinOutputFormat *outputFormat=[[HanyuPinyinOutputFormat alloc] init];
 3 [outputFormat setToneType:ToneTypeWithoutTone];
 4 [outputFormat setVCharType:VCharTypeWithV];
 5 [outputFormat setCaseType:CaseTypeUppercase];
 6 //遍历成员列表,将成员名字 contactName 转成拼音,并存放到 categoryName 字段中,用于排序
 7 [members enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
 8     ASContact *contact = (ASContact *)obj;
 9     NSString *outputPinyin=[PinyinHelper toHanyuPinyinStringWithNSString:contact.contactName withHanyuPinyinOutputFormat:outputFormat withNSString:@""];
10     contact.categoryName = [outputPinyin uppercaseString];
11 }];
12 [outputFormat release];
技术分享

将成员列表按照拼音字段 categoryName进行排序

技术分享
1 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"categoryName" ascending:YES];
2 NSArray *array = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
3 [members sortUsingDescriptors:array];
4 [array release];
5 [sortDescriptor release];

定义一个全局变量 dataDictionary 来组织数据结构

key: 将汉字转完拼音后的第一个字母, 也就是上图 section 中的 A、B、C...

value: 是一个成员数组,存放每个 section 下的成员列表

如上图: A 是字典的一个 Key, 对应的 value 就是成员数组 {af1, af10},当然数组中存放的是成员对象。

技术分享
技术分享
 1 dataDictionary = [[NSMutableDictionary alloc] init];
 2 //存放每个 section 下的成员数组
 3 NSMutableArray *currentArray = nil;
 4 //用于获取拼音中第一个字母
 5 NSRange aRange = NSMakeRange(0, 1);
 6 NSString *firstLetter = nil;
 7 //遍历成员列表组织数据结构
 8 for (ASContact *contact in members) {
 9     //如果是管理员,则暂时不放如 dataDictionary 中
10     if (contact.isAdmin == 1) {
11          continue;
12     }
13     //获取拼音中第一个字母,如果已经存在则直接将该成员加入到当前的成员数组中,如果不存在,创建成员数据,添加一个 key-value 结构到 dataDictionary 中
14     firstLetter = [contact.categoryName substringWithRange:aRange];
15     if ([dataDictionary objectForKey:firstLetter] == nil) {
16         currentArray = [NSMutableArray array];
17         [dataDictionary setObject:currentArray forKey:firstLetter];
18     }
19     [currentArray addObject:contact];
20 }
技术分享

在定义一个全局变量 allKeys 用于显示索引列表中索引

技术分享
1 //取出 dataDictionary 中的 key 并进行排序
2 allKeys = [[NSMutableArray alloc] initWithArray:[[dataDictionary allKeys] sortedArrayUsingFunction:sortObjectsByKey context:NULL]];
3 //然后将管理员加入到排好序 allKeys 的最前面
4 [allKeys insertObject:@"管理员" atIndex:0];
5 [dataDictionary setObject:[NSArray arrayWithObjects:contactAdmin, nil] forKey:@"管理员"];

版权声明:本文为博主原创文章,未经博主允许不得转载。

ios 汉字转拼音

标签:ios   汉字转拼音   

原文地址:http://blog.csdn.net/wenhaiwang/article/details/47149975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!