????? 本文是基于UITableView實(shí)現(xiàn)一個簡單的通訊錄,支持滑動刪除與標(biāo)記星標(biāo)好友以及索引功能秋柄。作為iOS開發(fā)者我相信大家對UITableView的使用已經(jīng)相當(dāng)熟練了,關(guān)于UITableView的基本使用我這里就不再贅述了蠢正。
1.處理數(shù)據(jù)源數(shù)據(jù)
???? 一般當(dāng)我們從后臺請求數(shù)據(jù)返回的結(jié)果可能是亂序的骇笔,我們這里需要實(shí)現(xiàn)索引功能,所以第一步應(yīng)該提取每一個聯(lián)系人姓名的首字母嚣崭,當(dāng)然有時候也可能是我們隨便輸入的笨触,他有可能是字母,數(shù)字或者表情符號雹舀。iOS 系統(tǒng)已經(jīng)給出了將漢字轉(zhuǎn)化為拼音的方法芦劣,我們再將首字母提取出來即可。
//先轉(zhuǎn)換為帶聲調(diào)的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
//再轉(zhuǎn)換為不帶聲調(diào)的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
當(dāng)然上述方法并不是萬能的说榆,在天朝博大精深的文化面前偶爾會顯得尷尬虚吟,當(dāng)漢字是多音字時就會出問題。大家都知道漢字在作為姓氏時签财,它的讀音會與漢字原有的讀音不同串慰。這個時候就需要我們自己做出矯正.
NSArray * chinacese = @[@"區(qū)",@"查",@"曾",@"晟",@"單",@"樂",@"仇",@"尉",@"沈"];
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;
}
}
}
上述是小編百度的一些漢字作為姓氏時讀音與漢字本身的讀音首字母不同時的一些漢字,有可能不全面希望大家補(bǔ)充一下荠卷。話說當(dāng)時小編忽略了多音字問題模庐,寫好程序后,興致勃勃的隨便編了一堆名字油宜,然后放到程序里運(yùn)行,結(jié)果發(fā)現(xiàn)“沈佳宜”被放到了C開頭的分組里怜姿,一開始小編以為是自己寫的程序有bug慎冤,后來debug發(fā)現(xiàn)“沈佳宜”轉(zhuǎn)化成拼音后變成了“chen jia yi”,后來又測試了“沈陽”出來的是“sheng yang”。這時候我以為是iOS系統(tǒng)有問題沧卢。這時候我開始懷疑人生了蚁堤。后來我又百度了“沈”的發(fā)音,竟然還有“chen”這個發(fā)音但狭∨看來iOS還是對多音字進(jìn)行了一些適配的但是作為名字的時候它就不那么準(zhǔn)確了。
然后我們提取出漢字首字母立磁,將首字母相同的聯(lián)系人歸為一類呈队,不是字母的歸為#號類,這里大家可以自己寫一個歸類的方法唱歧,當(dāng)然我后面會貼出demo的地址大家可以參考宪摧。
2.UITableView的代理方法實(shí)現(xiàn)滑動效果以及索引
//返回索引數(shù)組
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
return _indexs;
}
這個方法是實(shí)現(xiàn)索引的代理方法粒竖,我們只需要返回給系統(tǒng)包含你所有的索引的字符串的數(shù)組就可以了
- (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(@"點(diǎn)擊了刪除");
[self deleteFriend:friend];
}];
// 添加星標(biāo)好友按鈕或者刪除星標(biāo)好友
NSString * title;
if (friend) {
if (friend.starFriend) {
title = @"取消星標(biāo)好友";
}else{
title = @"添加星標(biāo)好友";
}
}
UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:title handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
NSLog(@"星標(biāo)按鈕");
if (friend.starFriend) {
//取消星標(biāo)好友操作
[self cancleStarFriend:friend];
}else{
//添加星標(biāo)好友操作
[self addStarFriend:friend];
}
}];
topRowAction.backgroundColor = [UIColor orangeColor];
// 將設(shè)置好的按鈕放到數(shù)組中返回
return @[deleteRowAction, topRowAction];
}
上面的這個方法是為UITableView添加滑動事件的方法几于,它的返回也是一個數(shù)組蕊苗,說明可以添加多個事件沿彭。
這里是Demo 的下載地址,不足之處希望大家多多指教喉刘。