zoukankan      html  css  js  c++  java
  • iOS基础-UIKit框架-高级视图-UIPickerView-实例2:城市选择(列与列之间有关系)

    说明:事先已经准备好了一个NJProvince类,里面声明了2个属性name和cities,并创建和实现了快速创建对象的动态方法和静态方法。直接导入即可。
    创建一个plist文件,Root为Array,里面为字典(字典里为省份和城市)
    加载这个plist文件

    @property(nonatomic,strong)NSArray *provinces;
    -(NSArray *)provinces
    {
      if(_provinces == nil){
      // 加载资源
      NSArray *array = [NSArray arrayWithContentsOfFile:[NSBundle mainBundle] pathForResource:@"cities.plist" ofType:nil]];
      //将字典转换为模型
      NSMutableArray *models = [NSMutableArray  arrayWithCapacity:array.count];
    
    for(NSDcitionary *dict in array){
      NJProvince *province = [NJProvince provinceWithDictionary:dict];
      [models addObject:province];
       }
       _provinces = [models copy];
      }
       return _provinces;
    }
    -(void)viewDidLoad
    
    {
    
       [super viewDidLoad];
    
    //1.创建pickerview
    //pickerView 有默认的frame
    UIPickerView = *pickerView = [UIPickerView alloc] init];
    //2.设置数据源和代理为控制器(并实现相关协议)
    pickerView.dataSource = self;
    pickerView.delegate = self;
    [self.view addSubview:pickerView];
    self.pickerView = pickerView  //具体添加原因看下面
    
    }

    实现数据源方法和代理方法

    #pragma mark - 数据源方法
    //告诉系统有多少列
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    {
       return 2;
    }
    
    注意:为了得到pickView,先添加一个UIPickerView属性,并在viewDidLoad中给这个属性赋值self.pickerView = pickerView;
    //告诉系统有多少行
    -(NSInteger)pickerView:(UIPickerView *)pickerView  numberOfRowsInComponents:(NSInteger)component
    {
       if0 == component){
      //省份
      return self.provinces.count;
    } else { //城市
    //0.获取第0列选中的行
    NSInteger selectIndex = [self.pickerView selectedRowInComponent:0];
    //1.根据第0列选中的行数获取对应省份(获取第一列选中行的模型)
    NJProvince *province = self.provinces[selectIndex];
    //2.获取对应省份的对应城市
    NSArray *cities = province.cities;
    //3.返回城市的个数
        return cities.count;
      }
    }
    
    #pragma mark - 代理方法
    //告诉系统每一行显示什么内容
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponents:(NSInteger)component
    {
        if0 == component){
    //省份
    return [self.provinces[row] name];
    } else { //城市
    //0.获取第0列选中的行 
    NSInteger selectIndex = [pickerView selectedRowInComponent:0]; 
    //1.获取对应的省份
    NJProvince *province = self.provinces[selectIndex];
    //2.获取对应的城市
         return province.cities[row];
       }
    }

    根据选中的省份显示出对应的城市

    //监听pickerView的选中
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
    //判断是否修改了第0列(省份列)
    if0 == component){
    //刷新第1列对应的数据
    pickerVIew reloadComponent:1];
    //让第1列滚动到第0行
    [pickerView selectRow:0 inComponent:1 animated:YES];
    }
  • 相关阅读:
    开启sftp服务日志并限制sftp访问目录
    Django-16-安装前端项目
    sql
    Django-15-用户模块、认证授权、session会话认证和token认证
    Django-14-项目工程搭建
    开发小技巧
    Django-13-类视图设计原则
    Django-11-自动生成routers路由、自定义action
    Django-9-序列化器中各种校验方式
    Django—问题—生成迁移脚本时报错:You are trying to add a non-nullable field 'gender' to interfaces without a default
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4721291.html
Copyright © 2011-2022 走看看