最近工程中要做一個通訊錄的功能唇礁,參考微信后發(fā)現(xiàn)微信的通訊錄是將字符串全部轉(zhuǎn)成拼音悟衩,然后進行排序规个。那么如何轉(zhuǎn)成拼音呢然后排序?因為每個字符都有對應得編碼枚冗,所以通過編碼然后在轉(zhuǎn)譯就可以實現(xiàn)排序了缓溅。
先上個效果圖
實現(xiàn)思路:
- 取出系統(tǒng)A~#27個字符,將其加到索引的數(shù)組中
- 創(chuàng)建一個數(shù)組赁温,里面的元素為單個索引數(shù)量的數(shù)組
- 判斷名字在索引中的位置坛怪,添加到聯(lián)系人(也就是索引數(shù)組中)
- 索引數(shù)組排序
- 去掉空的索引數(shù)組,只顯示當前有的聯(lián)系人
下面附上主要代碼
索引實現(xiàn)
// 索引字體顏色
_listTable.sectionIndexColor = [UIColor blueColor];
// 索引點擊后的背景顏色
_listTable.sectionIndexTrackingBackgroundColor = [UIColor clearColor];
// 索引的背景顏色
_listTable.sectionIndexBackgroundColor = [UIColor clearColor];
// 索引顯示的內(nèi)容
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return _titleArray;
}
// 索引點擊滑動的聯(lián)動
-(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
return [_titleArray indexOfObject:title];
}-
編碼以對應的轉(zhuǎn)譯算法
// 將中文轉(zhuǎn)成拼音
- (NSString *) pinyinFromChineseString:(NSString *)string {
if(!string || ![string length]) return nil;
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding( kCFStringEncodingGB_18030_2000);
NSData *gb2312_data = [string dataUsingEncoding:enc];unsigned char ucHigh, ucLow; int nCode; NSString *strValue = @""; int iLen = (int)[gb2312_data length]; char *gb2312_string = (char *)[gb2312_data bytes]; for (int i = 0; i < iLen; i++) { if ((unsigned char)gb2312_string[i] < 0x80 ) { strValue = [strValue stringByAppendingFormat:@"%c", gb2312_string[i] > 95 ? gb2312_string[i] - 32 : gb2312_string[i]]; continue; } ucHigh = (unsigned char)gb2312_string[i]; ucLow = (unsigned char)gb2312_string[i + 1]; if ( ucHigh < 0xa1 || ucLow < 0xa1) continue; else nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0; NSString *strRes = FindLetter(nCode); strValue = [strValue stringByAppendingString:strRes]; i++; } return [[NSString alloc] initWithString:strValue] ; }