iOS-(通讯录、地区)排序神器——UILocalizedIndexedCollation

有的app中有通讯录或者地区等信息,需要按照字母表进行A-Z的排序,在认识UILocalizedIndexedCollation神器之前,我的做法是利用字符串转化后排序,后来偶然发现,其实系统已经自带了排序类——UILocalizedIndexedCollation,效果如图:

iOS-(通讯录、地区)排序神器——UILocalizedIndexedCollation_第1张图片
Paste_Image.png

上关键部分代码:


-(void)setUpTableSection{
    UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
    
    //create a temp sectionArray
    NSUInteger numberOfSections = [[collation sectionTitles] count];
    NSMutableArray *newSectionArray = [[NSMutableArray alloc]init];
    for (NSUInteger index = 0; index < numberOfSections; index++) {
        [newSectionArray addObject:[[NSMutableArray alloc]init]];
    }
    
    // insert Persons info into newSectionArray
    for (RRZGoodFriendItem *item in self.friends) {
        NSUInteger sectionIndex;
        if (item.nameNotes) {
            sectionIndex = [collation sectionForObject:item collationStringSelector:@selector(nameNotes)];  //备注名
        }else{
            sectionIndex = [collation sectionForObject:item collationStringSelector:@selector(custNname)];  //昵称
        }
        [newSectionArray[sectionIndex] addObject:item];
    }
    
    //sort the person of each section
    for (NSUInteger index=0; index < numberOfSections; index++) {
        NSMutableArray *personsForSection = newSectionArray[index];
        NSArray *sortedPersonsForSection = [collation sortedArrayFromArray:personsForSection collationStringSelector:@selector(custNname)];
        newSectionArray[index] = sortedPersonsForSection;
    }
    
    NSMutableArray *temp = [NSMutableArray new];
    self.sectionTitlesArray = [NSMutableArray new];
    
    [newSectionArray enumerateObjectsUsingBlock:^(NSArray *arr, NSUInteger idx, BOOL *stop) {
        if (arr.count == 0) {
            [temp addObject:arr];
        } else {
            [self.sectionTitlesArray addObject:[collation sectionTitles][idx]];
        }
    }];
    
    [newSectionArray removeObjectsInArray:temp];
    
    NSMutableArray *operrationModels = [NSMutableArray new];
    NSArray *dicts = @[@{@"custNname" : @"关注我的", @"headPath" : @"r_address_newFriend"},
                       @{@"custNname" : @"我的关注", @"headPath" : @"r_address_regard"},
                       @{@"custNname" : @"群聊", @"headPath" : @"r_address_group"},
                       @{@"custNname" : @"黑名单", @"headPath" : @"r_address_blackList"}];
    
    for (NSDictionary *dic in dicts) {
        RRZGoodFriendItem *item = [RRZGoodFriendItem new];
        item.custNname = dic[@"custNname"];
        item.headPath = dic[@"headPath"];
        [operrationModels addObject:item];
    }
    
    [newSectionArray insertObject:operrationModels atIndex:0];
    [self.sectionTitlesArray insertObject:@"" atIndex:0];
    
    self.nFriends = newSectionArray;
}

这次没有上全部代码。若有疑问,欢迎留言。

你可能感兴趣的:(iOS-(通讯录、地区)排序神器——UILocalizedIndexedCollation)