按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  下方留言也可以。

请尊重劳动成果,转载请注明出处。谢谢合作。

厚积才能薄发。

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

最新文章

  1. What&#39;s Security
  2. 【原创】自己动手写工具----签到器[Beta 2.0]
  3. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
  4. 【Java EE 学习 34】【struts2学习第一天】
  5. mysql innodb表 utf8 gbk占用空间相同,毁三观
  6. Linux 学习之DNS服务器
  7. (实用篇)php中计算中文字符串长度、截取中文字符串的函数代码
  8. 【性能测试】性能测试总结&lt;一&gt;
  9. UML 中关系详解以及在visio中的表示
  10. jquery .net 无刷新多文件上传
  11. WPF学习(8)数据绑定
  12. OI队内测试一【数论概率期望】
  13. Django查询数据库性能优化
  14. Codeforces Round #425 (Div. 2) D.Misha, Grisha and Underground
  15. Intellij IDEA查看所有断点
  16. EBS财务模块表结构
  17. 在vue-cli3 中import引入一个没有export default{}的js文件
  18. canvas-8searchLight3.html
  19. go变量和常量
  20. sqlplus与shell互相传值的几种情况

热门文章

  1. Spring IoC 公共注解详解
  2. 开发者必备——API设计问题
  3. day46 mysql进阶
  4. Maven 专题(六):Maven核心概念详解(二)
  5. python 并发专题(十):基础部分补充(二)线程
  6. SpringBoot2.x入门:使用CommandLineRunner钩子接口
  7. 2020牛客暑期多校训练营(第一场)H Minimum-cost Flow
  8. 使用MapReduce运行WordCount案例
  9. drf☞jwt自动签发与手动签发
  10. oracle添加配置多个端口监听