微信通讯录列表右侧字母表控件, 着实感觉功能强大, 查找好友只要轻轻一划, 就可以找到好友, 而无需从很长的列表划好几下, 更没必要从标签查找了.
那么问题来了, 字母和姓氏怎么对应的呢? 系统是老外写的, 不可能像新华字典一样有个目录吧? 查找官方文档, 在CoreFoundation框架中找到了CString这个文件中的
CFStringTransform函数, 其实就这个函数就可以实现汉字转拼音的功能.
在此我分别封装了一个类方法和一个NSString的类别方法:
类方法:
iOSChineseToPinyin.h
- @interface iOSChineseToPinyin : NSObject
-
- + (NSString *)getPinyin:(NSString *)chinese;
-
- @end</span>
iOSChineseToPinyin.m
- @implementation iOSChineseToPinyin
-
- + (NSString *)getPinyin:(NSString *)chinese {
- NSMutableString *mutableString = [NSMutableString stringWithString:chinese];
-
- CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);
- CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);
- return mutableString;
- }
-
- @end</span>
NSString类别:
NSString+Pinyin.h
- @interface NSString (Pinyin)
-
- - (NSString *)getPinyin;
-
- @end</span>
NSString+Pinyin.m
- @implementation NSString (Pinyin)
-
- - (NSString *)getPinyin {
- NSMutableString *mutableString = [NSMutableString stringWithString:self];
-
- CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);
- CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);
- return mutableString;
- }
-
- @end</span>
封装的好处就是方便调用嘛~
类方法调用:
- #import "iOSChineseToPinyin.h"
- NSString *chinese = @"好好学习,天天向上";
- NSString *pinyin = [iOSChineseToPinyin getPinyin:chinese];
- NSLog(@"Method: %@",pinyin);</span>
类别调用:
- #import "NSString+Pinyin.h"
- NSString *chinese = @"好好学习,天天向上";
- NSLog(@"Category: %@", [chinese getPinyin]);</span>