iOS UILocalizedIndexedCollation排序神器

转载 2018年04月16日 16:19:48

UILocalizedIndexedCollation 是一个帮助我们组织列表数据的类,它能够根据地区来生成与之对应区域索引标题。不需要直接创建它的对象,我们可以通过 UILocalizedIndexedCollation +currentCollation 获得一个对应当前地区的单例对象。

项目地址:https://github.com/MisterZhouZhou/UISearchControllerAndUILocalizedCollection

简单操作如下:

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

    return [[[UILocalizedIndexedCollation currentCollation] sectionTitles]count];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    cell.textLabel.text = @"cell";
    return cell;
}

- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section
{
    return [[[UILocalizedIndexedCollation currentCollation] sectionTitles] objectAtIndex:section];
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView
sectionForSectionIndexTitle:(NSString *)title
               atIndex:(NSInteger)index
{
    return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

效果图:

这里写图片描述


下面开始对汉姓进行排序:
1、初始化数据:

//配置数据源
    NSArray *firstNameArray = @[@"赵",@"钱",@"孙",@"李",@"周",@"吴",@"郑",@"王",@"郭",@"松",@"宋",@"长",@"大",@"小"];
    NSMutableArray *tempArray = [NSMutableArray array];
    for (int i=0; i<firstNameArray.count; i++) {
        Person *p = [Person new];
        p.name = [NSString stringWithFormat:@"%@",firstNameArray[i]];
        [tempArray addObject:p];
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、对数据进行排序筛选


    //初始化UILocalizedIndexedCollation
    localizedCollection = [UILocalizedIndexedCollation currentCollation];
    //得出collation索引的数量,这里是27个(26个字母和1个#)
    NSInteger sectionTitlesCount = [[localizedCollection sectionTitles] count];
    //初始化一个数组newSectionsArray用来存放最终的数据
    NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];
    //初始化27个空数组加入newSectionsArray
    for (NSInteger index = 0; index < sectionTitlesCount; index++) {
            NSMutableArray *array = [[NSMutableArray alloc] init];
            [newSectionsArray addObject:array];
    }
    //将每个人按name分到某个section下
    for (Person *temp in tempArray) {
        //获取name属性的值所在的位置,比如"林丹",首字母是L,在A~Z中排第11(第一位是0),sectionNumber就为11
        NSInteger sectionNumber = [localizedCollection sectionForObject:temp collationStringSelector:@selector(name)];
        NSMutableArray *sectionNames = newSectionsArray[sectionNumber];
        [sectionNames addObject:temp];
    }

    //对每个section中的数组按照name属性排序
    for (int index = 0; index < sectionTitlesCount; index++) {
        NSMutableArray *personArrayForSection = newSectionsArray[index];
        NSArray *sortedPersonArrayForSection = [localizedCollection sortedArrayFromArray:personArrayForSection collationStringSelector:@selector(name)];
        newSectionsArray[index] = sortedPersonArrayForSection;
    }


    //section title
    sectionTitleArray = [NSMutableArray array];
    NSMutableArray *tempArr = [NSMutableArray array];
    [newSectionsArray enumerateObjectsUsingBlock:^(NSArray *array, NSUInteger idx, BOOL * _Nonnull stop) {

        if (array.count == 0) {
            [tempArr addObject:array];
        }else{
            [sectionTitleArray addObject:[localizedCollection sectionTitles][idx]];
        }
    }];
    [newSectionsArray removeObjectsInArray:tempArr];

    dataArray = newSectionsArray.copy;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

效果图:
这里写图片描述

iOS UILocalizedIndexedCollation排序神器

UILocalizedIndexedCollation 是一个帮助我们组织列表数据的类,它能够根据地区来生成与之对应区域索引标题。不需要直接创建它的对象,我们可以通过 UILocalizedIndex...
  • zww1984774346
  • zww1984774346
  • 2017年03月07日 15:21
  • 863

UILocalizedIndexedCollation ios首字母排列

最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引。因为按照我一贯的的做法,都是想要做成更通用的、支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多...
  • jonny_Qin520
  • jonny_Qin520
  • 2015年03月24日 10:42
  • 873

iOS开发------通讯录分组排序(UILocalizedIndexedCollation)

最近写了两篇关于通讯录的博文,通过前两篇博文的简要描述与介绍,基本是能够读出通讯录中的联系人,并能完成对通讯录增删改的操作,但在真实开发中,列出联系人之后是需要分组的,毕竟不能把联系人无规律的排列在t...
  • RunIntoLove
  • RunIntoLove
  • 2016年05月13日 16:23
  • 2430

iOS 使用UILocalizedIndexedCollation实现通讯录样式的索引

前一段时间要在应用程序中要加入检索的功能,在网上找了很多是手写的,于是今天在这里写一下备忘。直接贴的项目代码。 第一步:对数据源进行排序和分区处理。这里addressBookArray是存储最后...
  • lixuzong
  • lixuzong
  • 2014年12月09日 17:04
  • 1112

本地化下按首字母分组排序的神器——UILocalizedIndexedCollation

最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引。因为按照我一贯的的做法,都是想要做成更通用的、支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多...
  • gavin0123
  • gavin0123
  • 2015年08月12日 10:00
  • 753

iOS 汉子转拼音 按首字母排序

_indexArray = @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", ...
  • mingios
  • mingios
  • 2014年12月19日 10:28
  • 1674

iOS实现联系人按照首字母进行排序

联系人功能的需求一般都会有按照首字母排序,并且会要求同一个姓的就要连续起来中间不能穿插别的姓,百度了一下看到UILocalizedIndexedCollation给我们提供了很方便的排序方法,它不需要...
  • youyou_56
  • youyou_56
  • 2017年12月18日 15:06
  • 416

iOS UILocalizedIndexedCollation

UILocalizedIndexedCollation 是一个帮助我们组织列表数据的类,它能够根据地区来生成与之对应区域索引标题。不需要直接创建它的对象,我们可以通过 UILocalizedIndex...
  • caojengineer
  • caojengineer
  • 2015年06月07日 12:58
  • 300

swift3下通讯录的开发

swift3 通讯录 AddressBook CNContact 未授权时第一次打开崩溃问题 UILocalizedIndexedCollation排序...
  • u012297622
  • u012297622
  • 2017年02月09日 11:18
  • 1063

UILocalizedIndexedCollation简介

UILocalizedIndexedCollation 是相当于是tableView的一个辅助类,用来对tableView的数据源进行管理,排序,定位。 UILoaclizedIndexedColla...
  • xxq_2011
  • xxq_2011
  • 2015年05月09日 11:35
  • 2700
收藏助手
不良信息举报
您举报文章:iOS UILocalizedIndexedCollation排序神器
举报原因:
原因补充:

(最多只允许输入30个字)