demo3同通讯录展示的方式分组排序
时间:2022-04-26
本文章向大家介绍demo3同通讯录展示的方式分组排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
按A-Z顺序分组展示
有些项目中会需要这样的需求。形成类似于上述的界面。类似于通讯录里边的排序。实现的效果:所有的数据展示的时候,能够分组展示。顺序按照A-Z的书序进行排列。如果不是以A-Z开头,则默认为#一列。
一般我们从服务器拿到的数据都是一个数组。里边包含了所有的数据。
思路:思路很重要!!!
我的思路详解:首先界面的话 1.需要组的名称。组的名称就是这些数据的首字母。所以说这里需要一个数组,来存储这个组的名字。sortedSectionTitles
2.就是每一组下边的数据的排序了。针对这个的实现我们需要一个字典originDic 这个字典的样子类似于:
{ “A”:["Alice","Asss","Addd"],
"B":["blose","Bob"]
}
的结构。
核心代码如下:
手动创建数据组
for (ACCellModel *model in originArray) {
//每一个模型中的开始的第一字母。
NSString *indexKey = [self indexTitleForName:model.nickName];
//创建一个数组用来接收
NSMutableArray *names = originDic[indexKey];
if (!names) {
names = [NSMutableArray array];
originDic[indexKey] = names;
}
[names addObject:model];
//应该在这里对名字再进行一下排序
[names sortUsingComparator:^NSComparisonResult(ACCellModel *obj1, ACCellModel *obj2) {
//按照名字进行排序
NSComparisonResult result = [obj1.nickName compare:obj2.nickName];
return result;
}];
}
//对源数据的key进行排序
sortedSectionTitles = [[originDic allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
#pragma mark - 返回nickname的首字母
- (NSString *)indexTitleForName:(NSString *)name {
static NSString *otherKey = @"#";
if (!name) {
return otherKey;
}
//那到首字母
NSMutableString *mutableString = [NSMutableString stringWithString:[name substringToIndex:1]];
CFMutableStringRef mutableStringRef = (__bridge CFMutableStringRef)mutableString;
CFStringTransform(mutableStringRef, nil, kCFStringTransformToLatin, NO);
CFStringTransform(mutableStringRef, nil, kCFStringTransformStripCombiningMarks, NO);
NSString *key = [[mutableString uppercaseString] substringToIndex:1];
unichar capital = [key characterAtIndex:0];
if (capital >= 'A' && capital <= 'Z') {
return key;
}
return otherKey;
}
其实思路蛮简单的。滤清了思路,决会觉得so easy。
如有任何疑问,请联系本作者邮箱:673658918@qq.com QQ:673658917 下方留言也可以。
请尊重劳动成果,转载请注明出处。谢谢合作。
厚积才能薄发。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nmap NSE 库分析 >>> http
- Nmap NSE 库分析 >>> httpspider
- Nmap NSE 库分析 >>> url
- Go语言中的byte和rune区别、对比
- Nmap NSE 缺陷
- Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解
- Nmap NSE 库分析 >>> shortport
- Linux 后门系列之 python3 反弹shell & 隐藏后门
- nc 反弹shell | Linux 后门系列
- dash & rbash & nc.openbsd | Linux 后门系列
- 通达OA getshell | Nmap 脚本
- Golang的优雅重启
- 通达OA文件包含全版本 getshell | Nmap 脚本
- NSE代码生成器 | Nmap 脚本
- shell 加密传输 | Linux后门系列