1,创建模型:用来保存数据

创建模型:用来保存数据
模型.h文件

@interface CKUser : NSObject

//重写构造方法

-(instancetype)initWith:(NSString*)username name:(NSString*)name;

/*

* 名字

*/

@property (assign, readwrite, nonatomic) NSString *name;

@property (assign, readwrite, nonatomic) NSString *username;

@end

模型.m文件

@implementation CKUser

-(instancetype)initWith:(NSString*)username name:(NSString*)name {

self = [super init];

self.username = username;

self.name = name;

return self;

}

@end

根控制器设置UITableViewController的控制器

#import "ViewController.h"

#import "CKUser.h"

@interface ViewController ()

//数据保存的模型数组

@property (nonatomic, strong) NSMutableArray *userArray;

//分组的数组

@property (nonatomic, strong) NSMutableArray *sectionsArray;

//UITableView索引搜索工具类

@property (nonatomic, strong) UILocalizedIndexedCollation *collation;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//创建对象

//    self.collation = [UILocalizedIndexedCollation currentCollation];

//拿到列表  A - Z 在加一个 #  一共 27个

//    NSArray *temp = [self.collation sectionTitles];

//    NSLog(@"%@",temp);

[self configureSections];

}

#define NEW_USER(str) [[CKUser alloc] initWith:str name:str]

//配置分组信息

- (void)configureSections {

//初始化测试数据

self.userArray = [[NSMutableArray alloc] init];

[self.userArray addObject:NEW_USER(@"test001")];

[self.userArray addObject:NEW_USER(@"test002")];

[self.userArray addObject:NEW_USER(@"test003")];

[self.userArray addObject:NEW_USER(@"test004")];

[self.userArray addObject:NEW_USER(@"test005")];

[self.userArray addObject:NEW_USER(@"admin01")];

[self.userArray addObject:NEW_USER(@"admin02")];

[self.userArray addObject:NEW_USER(@"admin03")];

[self.userArray addObject:NEW_USER(@"bigBnag01")];

[self.userArray addObject:NEW_USER(@"bigBnag02")];

[self.userArray addObject:NEW_USER(@"what01")];

[self.userArray addObject:NEW_USER(@"what02")];

[self.userArray addObject:NEW_USER(@"李一")];

[self.userArray addObject:NEW_USER(@"李二")];

[self.userArray addObject:NEW_USER(@"刘涛")];

[self.userArray addObject:NEW_USER(@"吕洞宾")];

[self.userArray addObject:NEW_USER(@"刘麻子")];

[self.userArray addObject:NEW_USER(@"曹操")];

[self.userArray addObject:NEW_USER(@"曹值")];

[self.userArray addObject:NEW_USER(@"大海")];

[self.userArray addObject:NEW_USER(@"胡八一")];

[self.userArray addObject:NEW_USER(@"胡八二")];

[self.userArray addObject:NEW_USER(@"小三爷")];

[self.userArray addObject:NEW_USER(@"周记包子")];

//获得当前UILocalizedIndexedCollation对象并且引用赋给collation,A-Z的数据

self.collation = [UILocalizedIndexedCollation currentCollation];

//获得索引数和section标题数

NSInteger index, sectionTitlesCount = [[self.collation sectionTitles] count];

//临时数据,存放section对应的userObjs数组数据

//容量为 27个

NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];

//设置sections数组初始化:元素包含userObjs数据的空数据

//往 newSectionsArray   里面添加了27个空数组

for (index = 0; index < sectionTitlesCount; index++) {

NSMutableArray *array = [[NSMutableArray alloc] init];

[newSectionsArray addObject:array];

}

//将用户数据进行分类,存储到对应的sesion数组中

//获取每一个 数据模型

for (CKUser *userObj in self.userArray) {

//根据timezone的localename,获得对应的的section number

//判断首字符 的 一个位置

NSInteger sectionNumber = [self.collation sectionForObject:userObj collationStringSelector:@selector(username)];

//获得section的数组

NSMutableArray *sectionUserObjs = [newSectionsArray objectAtIndex:sectionNumber];

//添加内容到section中

[sectionUserObjs addObject:userObj];

//拿到当前 obj 所在的组数

NSInteger index =  [self.collation sectionForObject:userObj collationStringSelector:@selector(username)];

}

//排序,对每个已经分类的数组中的数据进行排序,如果仅仅只是分类的话可以不用这步

for (index = 0; index < sectionTitlesCount; index++) {

//获取每个数组

NSMutableArray *userObjsArrayForSection = [newSectionsArray objectAtIndex:index];

//获得排序结果

NSArray *sortedUserObjsArrayForSection = [self.collation sortedArrayFromArray:userObjsArrayForSection collationStringSelector:@selector(username)];

//替换原来数组

[newSectionsArray replaceObjectAtIndex:index withObject:sortedUserObjsArrayForSection];

}

self.sectionsArray = newSectionsArray;

}

//设置Section的数

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return [[self.collation sectionTitles] count];

}

//设置每个Section下面的cell数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// 在该节的时间区域的数目该节数组中的节相关联的数组的计数

NSArray *UserObjsInSection = [self.sectionsArray objectAtIndex:section];

return [UserObjsInSection count];

}

//设置每行的cell的内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *Identifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier];

}

// 从数组中的节索引关联的数组中获取区域。

NSArray *userNameInSection = [self.sectionsArray objectAtIndex:indexPath.section];

// 用时区的名称配置单元格

CKUser *userObj = [userNameInSection objectAtIndex:indexPath.row];

cell.textLabel.text = userObj.username;

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

/*

* 跟section有关的设定

*/

//设置section的Header

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

NSArray *UserObjsInSection = [self.sectionsArray objectAtIndex:section];

if(UserObjsInSection == nil || [UserObjsInSection count] <= 0) {

return nil;

}

return [[self.collation sectionTitles] objectAtIndex:section];

}

//设置索引标题

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

return [self.collation sectionIndexTitles];

}

//关联搜索-点击跳转到对应组

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {

//返回点击的 头部 索引

return [self.collation sectionForSectionIndexTitleAtIndex:index];

}

@end

创建模型:用来保存数据

仿微信联系人分组(右侧索引)相关推荐

  1. android 仿微信联系人 首字母分组快速索引

    总结是一种习惯,不能停,一停人就懒了,都快一个月没有写了!该提提神了! 进入正题:android 仿微信联系人 首字母快速索引,先用下美团的索引效果图: 1.自定义View字母索引栏(右边那一列): ...

  2. 仿微信联系人索引列表ListView

    IM 模块中经常用到 字母索引 ListView 来做通讯录 或者称联系人列表, 今天跟大家分享一个仿微信联系人索引列表, 优点是轻量级,简单易懂. 不要任何依赖 , jar包等 效果预览 工程结构 ...

  3. android仿微信点击好友,安卓开发仿微信联系人列表-机器人列表视图仿微通道聊天多久最底部滑动...

    楼主你好!根据你的描述,让我给你答案! :新内容加进来,列表视图重新为setSelection后,定位结束后,拉起一个页面放. . 希望你能有所帮助,如果满意,请记得采纳像下拉条为微信好友如何实现 简 ...

  4. android 微信 联系人,android高仿微信联系人选择

    如题,仿造微信联系人选择. 实现起来也是相当的简单. ChineseToEnglish为网上找的中文转拼音的类,  CompareSort是实现联系人list的排序类  SideBarView右侧的字 ...

  5. SideBar 仿微信联系人侧边栏界面搜索Viwe

    需要做了一个仿微信侧边烂搜索界面的View,这种简单的控件如果去github上的话,很麻烦,所以就自己写了一个,代码很简单,不多说,上代码 public class SideBar extends V ...

  6. 带中文索引的ListView 仿微信联系人列表

    因为各种原因,项目经理和产品经理把我做的东西给否定了,所以决定分享出去. 主要功能: 1 .带中文索引的ListView 2.自己定义顶部搜索视图,能够对返回button,搜索button加入事件监听 ...

  7. android仿微信联系人索引列表

    前言   因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太 ...

  8. android 通讯录界面设计带字母,android仿微信联系人索引列表功能

    前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太复杂 ...

  9. 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...

最新文章

  1. VTK:PolyData之NullPoint
  2. Linux打开rtf文档,在linux下设置开机自动启动程序的方法_精品.rtf
  3. GNU/CPIO 学习小结
  4. linux修改永久ip地址,centos设置IP地址,永久修改ipv4
  5. mysql建立从库同时备份_mysql主从库配置读写分离以及备份
  6. 傅盛希望定义AI时代的机器人产品,2年交出这份可落地答卷
  7. linux 怎么在pe下安装驱动程序,【教程】再谈“万能驱动7在PE下安装驱动”功能...
  8. 老MacBook升级内存记
  9. 关于局域网计算机ip地址设置,怎么设置局域网计算机的IP地址
  10. 国产银河数学式电子计算机是属于,《世界上公认的第一台电子计算机.doc
  11. 用c语言编程航空售票管理系统,百分求以下代码-仓库管理系统或航空售票系统用C语言实现,最好加有 爱问知识人...
  12. jsbeautify格式化html属性分行展示
  13. 用FPGA实现半加器
  14. 如果长颈鹿哭了,它会不会要哽咽好久
  15. ECharts 示例——双Y轴(一)
  16. Java中类、抽象类、接口的联系与区别
  17. Android钢琴滑动代码,Android实现简易版弹钢琴效果
  18. 语音识别服务_语音识别服务厂商_腾讯云语音识别服务 - 云+社区 - 腾讯云
  19. Android—— ListView 的简单用法及定制ListView界面
  20. Gym - 102460L Largest Quadrilateral(几何-凸包+旋转卡壳求最大的四边形面积)

热门文章

  1. 日语学习 特别篇 各种总结(家庭成员、数字、星期、月份、方位、都道府县等)
  2. 2021年西交大计基题目解析(第13周)
  3. 2021年R1快开门式压力容器操作免费试题及R1快开门式压力容器操作模拟考试
  4. 美通社企业新闻汇总 | 百度英业达合作研发超级AI计算平台;《2019大中华薪资指南》发布...
  5. 【sdx62】从板子导出fdt文件转化为dtsi文件方法
  6. 中国地质大学计算机学院戴光明,【最美地大教工】戴光明:培养人才是义不容辞的责任...
  7. 平淡生活:你能听到心碎的声音吗
  8. python 字段升序,在Python中按键或值按升序和降序对字典排序
  9. 居于vue的echart云南地图
  10. MATLAB动态星星运转模型