zoukankan      html  css  js  c++  java
  • UIPickerView(省动联动 两列有关联)

    "【案例: 省市联动】"

    》添加Province模型加载plist文件

    》实现PickerView的数据源和代理(用Main.storyboard)

    (1)返回两组数据

    (2)实现PickerView的代理,使用【-(UIView *)pickerView:viewForRow:forComponent:reusingView:】方法,返回一个Label

    (3)添加一个当前省份选中索引IndexOfProv

    (4)默认城市那一组数据 返回 第一个省份的城市数据

    (5)当前省份选中的索引改变时,刷新城市数据并默认选中的第一个城市

    *[pickerView reloadComponent:1];

    *[pickerView selectRow:0 inComponent:1 animated:YES];

    》掌握设置组宽的代理方法

    (1)实现【-(CGFloat)pickerView:widthForComponent:】方法设置组的宽度

    (2)设置两列View的背景颜色不同看出宽度的区别

    Province.h

    //

    //  Province.h

    //  03.省市联动

    //

    //  Created by Yong Feng Guo on 14-12-19.

    //  Copyright (c) 2014 Fung. All rights reserved.

    //

     

    #import <UIKit/UIKit.h>

     

    @interface Province : NSObject

     

    @property(nonatomic,copy)NSString *name;

    @property(nonatomic,strong)NSArray *cities;

     

    -(instancetype)initWithDict:(NSDictionary *)dict;

    +(instancetype)provinceWithDict:(NSDictionary *)dict;

     

    +(NSArray *)provinceList;

    @end

    Province.m 

    //

    //  Province.m

    //  03.省市联动

    //

    //  Created by Yong Feng Guo on 14-12-19.

    //  Copyright (c) 2014 Fung. All rights reserved.

    //

     

    #import "Province.h"

     

    @implementation Province

     

     

    -(instancetype)initWithDict:(NSDictionary *)dict{

        if (self = [super init]) {

            [self setValuesForKeysWithDictionary:dict];

        }

        

        return self;

    }

    +(instancetype)provinceWithDict:(NSDictionary *)dict{

        return [[self alloc] initWithDict:dict];

    }

     

    +(NSArray *)provinceList

    {

        //plist 文件路径

        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil];

        NSArray *provincePlist = [NSArray arrayWithContentsOfFile:filePath];

        NSMutableArray *provinceM = [NSMutableArray array];

        for (NSDictionary *dic in provincePlist) {

            Province *prov = [Province provinceWithDict:dic];

            [provinceM addObject:prov];

            }

        

        return provinceM;

    }

    @end

    ViewController.m

    //

    //  ViewController.m

    //  03.省市联动

    //

    //  Created by huan on 16/1/8.

    //  Copyright © 2016 huanxi. All rights reserved.

    //

     

    #import "ViewController.h"

    #import "Province.h"

    @interface ViewController ()<UIPickerViewDataSource, UIPickerViewDelegate>

    @property (nonatomic, strong) NSArray *provinces;

    @property (nonatomic, assign) NSInteger indexOfProvince;//当前默认选中的省份

     

    @end

     

    @implementation ViewController

    -(NSArray *)provinces

    {

        if (!_provinces) {

            _provinces = [Province provinceList];

        }

        return _provinces;

    }

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        NSLog(@"%@", self.provinces);

    }

     

    // returns the number of 'columns' to display.

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

    {

        return 2;

    }

     

    // returns the # of rows in each component..

    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

    {

    //    return 12;

        if (component == 0) {

            return self.provinces.count;

        }

        //获得对应省份的城市的个数

        Province *province = self.provinces[self.indexOfProvince];

        return province.cities.count;

        

    }

    #pragma mark 显示数据

    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

    {

        //对应列行的省份

        Province *province = self.provinces[row];

        if (component == 0) {//显示省份的名字

            return province.name;

        }

        //获取选中的城市,显示城市的名字

        Province *selectedProvice = self.provinces[self.indexOfProvince];

        return selectedProvice.cities[row];

        

    }

    //-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    //    UILabel *label = (UILabel *)view;

    //    if (!label) {

    //        label = [[UILabel alloc] init];

    //    }

    //    if (component == 0) {//显示省份的名字

    //        

    //        Province *province = self.provinces[row];

    //        label.text = province.name;

    //        label.backgroundColor = [UIColor grayColor];

    //    }

    //    else{

    //    //获取选中的城市,显示城市的名字

    //    Province *selectedProvice = self.provinces[self.indexOfProvince];

    //    label.text = selectedProvice.cities[row];

    //    label.backgroundColor = [UIColor blueColor];

    //    }

    //    return label;

    //    

    //}

     

     

     

    #pragma mark 选中行

    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

    {

        if (component == 0) {//第一列省的选中改变后,就更新第二列数据

            

            //更新选中省份的索引

            self.indexOfProvince = row;

            //刷新数据

            //全部刷新

    //        [pickerView reloadAllComponents];

            //部分刷新

            [pickerView reloadComponent:1];

            //不管之前第二列选中第几行,重新刷新数据后,都显示第二列的第一行

            [pickerView selectRow:0 inComponent:1 animated:YES];

        }

    }

     

    #pragma mark 设置宽度

    -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{

        if (component == 0) {

            return 80;

        }

        return 200;

    }

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

  • 相关阅读:
    css选择器的分类及优先级计算方法总结
    第四周实验总结&实验报告
    2019春季总结
    第七周课程总结&实验报告五
    第六周学习总结&java实验报告四
    第二周Java学习总结
    第九周课程总结&实验报告(七)
    第五周学习总结&实验报告三
    第三周课程总结及实验报告
    第八周课程总结&实验报告(六)
  • 原文地址:https://www.cnblogs.com/Lu2015-10-03/p/5126964.html
Copyright © 2011-2022 走看看