IOS PickerView使用

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 1.创建pickerview
    // pickerview有默认的frame
    UIPickerView *pickerView = [[UIPickerView alloc] init];
    pickerView.dataSource = self;
    pickerView.delegate = self;
    [self.view addSubview:pickerView];
    self.pickerView = pickerView;
}

#pragma mark - UIPickerViewDataSource
// 告诉系统有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}
// 告诉系统有多少行
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (0 == component) {
        // 省份列
        return self.provinces.count;
    }else
    {
        // 城市列
        // 获取第0列选中的行
        NSInteger selectIndex = [self.pickerView selectedRowInComponent:0];
        // 1.根据第0列选中的行数获取对应的省
        NJProvince *province = self.provinces[selectIndex];
        // 2.获取对应省份对应的城市
        NSArray *cities = province.cities;
        // 3.返回城市的个数r
        return cities.count;
    }
}
#pragma mark - UIPickerViewDelegate
// 告诉系统每一行显示什么内容
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSLog(@"titleForRow");
    
    if (0 == component) {
         // 省份
        // 1.获取对应行对应的省份模型
        NJProvince *province = self.provinces[row];
        // 2.返回省份的名称
        return province.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列(省份列)
    if (0 == component) {
        // 刷新第1列对应的数据
        [pickerView reloadComponent:1];
        // 让第1列滚动到第0行
        [pickerView selectRow:0 inComponent:1 animated:YES];
    }
}
原文地址:https://www.cnblogs.com/liuwj/p/6502900.html