zoukankan      html  css  js  c++  java
  • 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  下方留言也可以。

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

    厚积才能薄发。

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

    对上述的代码,有任何疑问,可以在下方留言。 也可以给我发邮件咨询:673658917@qq.com 或者是直接加qq:673658917 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    pandas 数据预处理实例演示
    pandas 包的基本使用
    Numpy 包的基础结构(下)
    Numpy 包的基础结构(上)
    Anaconda的基本使用
    黄金点游戏结果
    个人作业-Week2:案例分析
    结对项目-地铁出行路线规划程序(续)
    关于结对和团队组建
    关于个人博客和Github地址提交
  • 原文地址:https://www.cnblogs.com/lishanshan/p/8259658.html
Copyright © 2011-2022 走看看