欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS tabview如何添加字母索引

程序员文章站 2024-02-14 16:43:40
本文实例为大家分享了ios tabview添加字母索引的具体代码,供大家参考,具体内容如下 文章转载自大神源码传送门 1、将汉字转换成首字母 //系统获...

本文实例为大家分享了ios tabview添加字母索引的具体代码,供大家参考,具体内容如下

文章转载自大神源码传送门

1、将汉字转换成首字母

//系统获取首字母
- (nsstring *) pinyinfirstletter:(nsstring*)sourcestring {
 nsmutablestring *source = [sourcestring mutablecopy];
 cfstringtransform((__bridge cfmutablestringref)source, null, kcfstringtransformmandarinlatin, no);
 cfstringtransform((__bridge cfmutablestringref)source, null, kcfstringtransformstripdiacritics, no);//这一行是去声调的
 return source;
}

2、和tabview绑定的方法

#import "viewcontroller.h"
#import "bmchinesesort.h"
#import "person.h"

@interface viewcontroller (){
 nsmutablearray<person *> *dataarray;
}
//排序后的出现过的拼音首字母数组
@property(nonatomic,strong)nsmutablearray *indexarray;
//排序好的结果数组
@property(nonatomic,strong)nsmutablearray *letterresultarr;
@end

@implementation viewcontroller

- (void)viewdidload {
 [super viewdidload];

 //模拟数据加载 dataarray中得到person的数组
 [self loaddata];

 //bmchinesesort 文件包含两个对单元格数据和右侧字母的数组排序函数
 //根据person对象的 name 属性 按中文 对 person数组 排序
 //每一个单元格的数据,排序好了的
 self.indexarray = [bmchinesesort indexwitharray:dataarray key:@"name"];
 //左侧的字母数组,已经排序好了
 self.letterresultarr = [bmchinesesort sortobjectarray:dataarray key:@"name"];

 uitableview *table = [[uitableview alloc] initwithframe:self.view.frame];
 table.delegate = self;
 table.datasource = self;
 [self.view addsubview:table];
}
//加载模拟数据
-(void)loaddata{
 nsarray *stringstosort=[nsarray arraywithobjects:
       @"李白",@"张三",
       @"重庆",@"重量",
       @"调节",@"调用",
       @"小白",@"小明",@"千珏",
       @"黄家驹", @"鼠标",@"hello",@"多美丽",@"肯德基",@"##",
       nil];

 //模拟网络请求接收到的数组对象 person数组
 dataarray = [[nsmutablearray alloc] initwithcapacity:0];
 for (int i = 0; i<[stringstosort count]; i++) {
  person *p = [[person alloc] init];
  p.name = [stringstosort objectatindex:i];
  p.number = i;
  [dataarray addobject:p];
 }
}

#pragma mark - uitableview -
//section的titleheader
- (nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section {
 return [self.indexarray objectatindex:section];
}
//section行数
-(nsinteger)numberofsectionsintableview:(uitableview *)tableview{
 return [self.indexarray count];
}
//每组section个数
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section{
 return [[self.letterresultarr objectatindex:section] count];
}
//section右侧index数组
-(nsarray *)sectionindextitlesfortableview:(uitableview *)tableview{
 return self.indexarray;
}
//点击右侧索引表项时调用 索引与section的对应关系
- (nsinteger)tableview:(uitableview *)tableview sectionforsectionindextitle:(nsstring *)title atindex:(nsinteger)index{
 return index;
}
//返回cell
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath{
 uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:@"cell"];
 if (cell == nil){
  cell = [[uitableviewcell alloc] initwithstyle:uitableviewcellstyledefault reuseidentifier:@"cell"];
 }
 //获得对应的person对象<替换为你自己的model对象>
 person *p = [[self.letterresultarr objectatindex:indexpath.section] objectatindex:indexpath.row];
 cell.textlabel.text = p.name;
 return cell;
}
@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。