仿微信联系人分组(右侧索引)
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
仿微信联系人分组(右侧索引)相关推荐
- android 仿微信联系人 首字母分组快速索引
总结是一种习惯,不能停,一停人就懒了,都快一个月没有写了!该提提神了! 进入正题:android 仿微信联系人 首字母快速索引,先用下美团的索引效果图: 1.自定义View字母索引栏(右边那一列): ...
- 仿微信联系人索引列表ListView
IM 模块中经常用到 字母索引 ListView 来做通讯录 或者称联系人列表, 今天跟大家分享一个仿微信联系人索引列表, 优点是轻量级,简单易懂. 不要任何依赖 , jar包等 效果预览 工程结构 ...
- android仿微信点击好友,安卓开发仿微信联系人列表-机器人列表视图仿微通道聊天多久最底部滑动...
楼主你好!根据你的描述,让我给你答案! :新内容加进来,列表视图重新为setSelection后,定位结束后,拉起一个页面放. . 希望你能有所帮助,如果满意,请记得采纳像下拉条为微信好友如何实现 简 ...
- android 微信 联系人,android高仿微信联系人选择
如题,仿造微信联系人选择. 实现起来也是相当的简单. ChineseToEnglish为网上找的中文转拼音的类, CompareSort是实现联系人list的排序类 SideBarView右侧的字 ...
- SideBar 仿微信联系人侧边栏界面搜索Viwe
需要做了一个仿微信侧边烂搜索界面的View,这种简单的控件如果去github上的话,很麻烦,所以就自己写了一个,代码很简单,不多说,上代码 public class SideBar extends V ...
- 带中文索引的ListView 仿微信联系人列表
因为各种原因,项目经理和产品经理把我做的东西给否定了,所以决定分享出去. 主要功能: 1 .带中文索引的ListView 2.自己定义顶部搜索视图,能够对返回button,搜索button加入事件监听 ...
- android仿微信联系人索引列表
前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太 ...
- android 通讯录界面设计带字母,android仿微信联系人索引列表功能
前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太复杂 ...
- 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家
App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...
最新文章
- VTK:PolyData之NullPoint
- Linux打开rtf文档,在linux下设置开机自动启动程序的方法_精品.rtf
- GNU/CPIO 学习小结
- linux修改永久ip地址,centos设置IP地址,永久修改ipv4
- mysql建立从库同时备份_mysql主从库配置读写分离以及备份
- 傅盛希望定义AI时代的机器人产品,2年交出这份可落地答卷
- linux 怎么在pe下安装驱动程序,【教程】再谈“万能驱动7在PE下安装驱动”功能...
- 老MacBook升级内存记
- 关于局域网计算机ip地址设置,怎么设置局域网计算机的IP地址
- 国产银河数学式电子计算机是属于,《世界上公认的第一台电子计算机.doc
- 用c语言编程航空售票管理系统,百分求以下代码-仓库管理系统或航空售票系统用C语言实现,最好加有 爱问知识人...
- jsbeautify格式化html属性分行展示
- 用FPGA实现半加器
- 如果长颈鹿哭了,它会不会要哽咽好久
- ECharts 示例——双Y轴(一)
- Java中类、抽象类、接口的联系与区别
- Android钢琴滑动代码,Android实现简易版弹钢琴效果
- 语音识别服务_语音识别服务厂商_腾讯云语音识别服务 - 云+社区 - 腾讯云
- Android—— ListView 的简单用法及定制ListView界面
- Gym - 102460L Largest Quadrilateral(几何-凸包+旋转卡壳求最大的四边形面积)
热门文章
- 日语学习 特别篇 各种总结(家庭成员、数字、星期、月份、方位、都道府县等)
- 2021年西交大计基题目解析(第13周)
- 2021年R1快开门式压力容器操作免费试题及R1快开门式压力容器操作模拟考试
- 美通社企业新闻汇总 | 百度英业达合作研发超级AI计算平台;《2019大中华薪资指南》发布...
- 【sdx62】从板子导出fdt文件转化为dtsi文件方法
- 中国地质大学计算机学院戴光明,【最美地大教工】戴光明:培养人才是义不容辞的责任...
- 平淡生活:你能听到心碎的声音吗
- python 字段升序,在Python中按键或值按升序和降序对字典排序
- 居于vue的echart云南地图
- MATLAB动态星星运转模型