美文网首页iOS常用
iOS开发 将城市按照首字母分组(包含中英文)

iOS开发 将城市按照首字母分组(包含中英文)

作者: 我是卖报的小行家 | 来源:发表于2020-11-05 17:07 被阅读0次

需求:返回城市列表,并且按照字母分组排序结果图如下


省份列表

主要工作内容就是对数据进行处理,主要是数组的处理

viewDidLoad 创建模拟数据,进行处理,创建UI

//模拟后台返回数据
NSArray * array1 = @[@"陕西",@"山东",@"上海",@"内蒙古",@"新疆",@"西藏",@"北京",@"安徽",@"重庆",@"湖北",@"江苏",@"浙江",@"天津",@"California",@"贵州",@"云南",@"广东",@"甘肃",@"青海",@"宁夏",@"黑龙江",@"辽宁",@"吉林",@"江西",@"LosAngels",@"OKC",@"GSW"];

//对数组按照首字母进行排序
NSArray *array = [self getOrderArraywithArray:array1];
//创建可变字典保存处理后的数据@{@"A":@[@"A",@"AB"]};数据格式
self.mdic = [NSMutableDictionary new];
for (NSString *city in array) {
        // 将中文转换为拼音
        NSString *cityMutableString = [NSMutableString stringWithString:city];
        CFStringTransform((__bridge CFMutableStringRef)cityMutableString, NULL, kCFStringTransformMandarinLatin, NO);
        CFStringTransform((__bridge CFMutableStringRef)cityMutableString, NULL, kCFStringTransformStripCombiningMarks, NO);
        // 拿到首字母作为key
NSString *firstLetter = [[cityMutableString uppercaseString]substringToIndex:1];
        // 检查是否有firstLetter对应的分组存在, 有的话直接把city添加到对应的分组中
        // 没有的话, 新建一个以firstLetter为key的分组

if ([mDic objectForKey:firstLetter]) {
    NSMutableArray * mCityArray = mDic[firstLetter];
    if (mCityArray) {
        [mCityArray addObject:city];
        mDic[firstLetter] = mCityArray;
    }else{
        mDic[firstLetter] = [NSMutableArray arrayWithArray:@[city]];
    }
}else{
    [mDic setObject:[NSMutableArray arrayWithArray:@[city]] forKey:firstLetter];
}
}
//获取索引栏数据
self.titlesArray = [self reqDiction:mDic];

UITableView * tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
    //创建索引栏
SCIndexViewConfiguration *indexViewConfiguration = [SCIndexViewConfiguration configuration];
SCIndexView *indexView = [[SCIndexView alloc] initWithTableView:tableView configuration:indexViewConfiguration];
indexView.translucentForTableViewInNavigationBar = YES;
indexView.dataSource = self.titlesArray;
[self.view addSubview:indexView];

对数组进行排序

- (NSArray *)getOrderArraywithArray:(NSArray *)array{
    //数组排序
    //定义一个数字数组
    //对数组进行排序
    NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        return [obj1 compare:obj2]; //升序
    }];
    return result;
}

通过取出字典的所有key值,利用sortedArrayUsingComparator进行降序排序

- (NSArray *)reqDiction:(NSDictionary *)dict{
 
    NSArray *allKeyArray = [dict allKeys];
    NSArray *afterSortKeyArray = [allKeyArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        NSComparisonResult resuest = [obj1 compare:obj2];  //[obj1 compare:obj2]:升序
        return resuest;
    }];
    NSLog(@"afterSortKeyArray:%@",afterSortKeyArray);
     
    //通过排列的key值获取value
    NSMutableArray *valueArray = [NSMutableArray array];
    for (NSString *sortsing in afterSortKeyArray) {
        NSString *valueString = [dict objectForKey:sortsing];
        [valueArray addObject:valueString];
    }
 
    return afterSortKeyArray;
}

tableViewDelegate&tableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.titlesArray.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSString * titles = self.titlesArray[section];
    return [self.mdic[titles] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    NSString * titles = self.titlesArray[indexPath.section];
    cell.textLabel.text = self.mdic[titles][indexPath.row];
    return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return self.titlesArray[section];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return [UIView new];
}

相关文章

网友评论

    本文标题:iOS开发 将城市按照首字母分组(包含中英文)

    本文链接:https://www.haomeiwen.com/subject/ffdovktx.html