zoukankan      html  css  js  c++  java
  • ios选择城市

    在ios开发当中,选择城市是很常用的,一般都是根据城市的拼音首字母进行分组,然后用分组的UITableView展现出来,实现的效果如下

    我是使用了两个plist文件存储城市的,一个是存储所有的城市,另外一个是存储热门城市

    存储所有的城市的city.plist,只是存取城市的中文名称而已,之后用一个第三方的开源库ChineseToPinyin来把中文转换成拼音,然后根据拼音的首字母就可以分组了

    存储热门城市的hotCity.plist,也只是存储中文名称,之后把这一组直接归为热门这一组就可以了

    下面讲解一下具体操作

    第一步就是直接读取了,这一步不用多说了

    1     hotcityarray=[[NSMutableArray  alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"hotCity" ofType:@"plist"]];
    2     
    3     cityarray=[[NSMutableArray  alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"]];

    第二步就是创建个NSMutableDictionary,key就是字母,value就是城市拼音首字母是key的所有城市

    cityDic=[[NSMutableDictionary alloc]init];
        
        NSString * pinyin=nil;
        
        NSMutableArray *arr=nil;
        
        for (NSString * city in cityarray) {
            
            pinyin=[[ChineseToPinyin pinyinFromChiniseString:city] substringToIndex:1];
            
            //如果包含key
            if([[cityDic allKeys]containsObject:pinyin]){
            
                arr=[cityDic objectForKey:pinyin];
                [arr addObject:city];
                [cityDic setObject:arr forKey:pinyin];
                
            }else{
            
                arr= [[NSMutableArray alloc]initWithObjects:city, nil];
                [cityDic setObject:arr forKey:pinyin];
            
            }
           
        }

    第三步就是把热门城市加进去

        sortArray=[[NSMutableArray alloc]initWithObjects:@"热门", nil];
        
        sortArray= [sortArray arrayByAddingObjectsFromArray:[[cityDic allKeys] sortedArrayUsingSelector:@selector(compare:)]];
        
        [cityDic setObject:hotcityarray forKey:@"热门"];

    这样数据处理就基本完成了

    下一步就是界面展现了

    #pragma mark Table View Data Source Methods
    //选中
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSUInteger section = [indexPath section];
        NSUInteger row = [indexPath row];
        NSMutableArray *array=[tableViewDic objectForKey:[sortArray objectAtIndex:section]];
    
        NSLog(@"%@",[array objectAtIndex:row]);
        
        [[NSUserDefaults  standardUserDefaults]setObject:[array objectAtIndex:row] forKey:@"city"];
        
        [[NSUserDefaults  standardUserDefaults]synchronize];
        
        
        [self back:nil];
        
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        //这个方法用来告诉表格有几个分组
        return [sortArray count];
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        //这个方法告诉表格第section个分组有多少行
        
           return [[tableViewDic objectForKey:[sortArray objectAtIndex:section]]count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        //这个方法用来告诉某个分组的某一行是什么数据,返回一个UITableViewCell
        NSUInteger section = [indexPath section];
        NSUInteger row = [indexPath row];
    
        
        static NSString *GroupedTableIdentifier = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
                                 GroupedTableIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]
                    initWithStyle:UITableViewCellStyleDefault
                    reuseIdentifier:GroupedTableIdentifier];
        }
        
       NSMutableArray *array=[tableViewDic objectForKey:[sortArray objectAtIndex:section]];
        
        //给Label附上城市名称  key 为:C_Name
        cell.textLabel.text = [array objectAtIndex:row];
        cell.textLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:15];
        
        
        
        return cell;
    }
    
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
        //这个方法用来告诉表格第section分组的名称
        return [sortArray objectAtIndex:section];
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        return 40.0f;
    }
    
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        //返回省份的数组
      
        return sortArray;
    }

    然后再增加个UISearchBar用于搜索城市,这样就搞定了

    源代码

  • 相关阅读:
    【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
    【Golang 接口自动化07】struct转map的三种方式
    【Golang 接口自动化06】微信支付md5签名计算及其优化
    【Golang 接口自动化05】使用yml管理自动化用例
    【Golang 接口自动化04】 解析接口返回JSON串
    【Mac】小技巧:实现ssh服务器别名免密登录
    【Golang】幽灵变量(变量覆盖)问题的一劳永逸解决方法
    【Golang】字符串首字母大小写转化
    【Python】给图片添加水印的Python及Golang实现
    sequelize处理日期格式化
  • 原文地址:https://www.cnblogs.com/xiaolai/p/4052624.html
Copyright © 2011-2022 走看看