当选中省的时候,默认选中第一个row,但必须是选一次城市后,底部Label框才会显示 省和城市的 文字,这里增强只要选择省,也可以在Label中显示省和城市的文字。
//
// TXProvince.h
// SelectCity
//
// Created by mac on 14-11-24.
// Copyright (c) 2014年 manyjoys. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface TXProvince : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSArray *cities;
+ (instancetype)provinceWithDict:(NSDictionary *)dict;
- (instancetype)initWithDict:(NSDictionary *)dict;
@end
==================
//
// TXProvince.m
// SelectCity
//
// Created by mac on 14-11-24.
// Copyright (c) 2014年 manyjoys. All rights reserved.
//
#import "TXProvince.h"
@implementation TXProvince
+ (instancetype)provinceWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
- (instancetype)initWithDict:(NSDictionary *)dict
{
if(self = [super init])
{
//self.name = dict[@"name"];
//self.cities = dict[@"cities"];
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
@end
===================
//
// TXViewController.m
// SelectCity
//
// Created by mac on 14-11-24.
// Copyright (c) 2014年 manyjoys. All rights reserved.
//
#import "TXViewController.h"
#import "TXProvince.h"
@interface TXViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
@property (nonatomic, strong) NSMutableArray *provinces;
@property (nonatomic, weak) UIPickerView *pickerView;
@property (nonatomic, weak) UILabel *displayView;
@end
@implementation TXViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIPickerView *pickView = [[UIPickerView alloc] init];
pickView.dataSource = self;
pickView.delegate = self;
pickView.showsSelectionIndicator = YES;
[self.view addSubview:pickView];
self.pickerView = pickView;
[self.pickerView selectRow:0 inComponent:0 animated:YES];
UILabel *displayView = [[UILabel alloc] initWithFrame:CGRectMake(0, 400, 300, 44)];
displayView.backgroundColor = [UIColor grayColor];
displayView.textColor = [UIColor greenColor];
[self.view addSubview:displayView];
self.displayView = displayView;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
return self.provinces.count;
} else {
int provinceIndex = [pickerView selectedRowInComponent:0];
TXProvince *province = self.provinces[provinceIndex];
return province.cities.count;
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) {
TXProvince *province = self.provinces[row];
return province.name;
} else {
int cityIndex = [pickerView selectedRowInComponent:1];
int provinceIndex = [pickerView selectedRowInComponent:0];
TXProvince *province = self.provinces[provinceIndex];
[self displayProvince:province.name AndCity:province.cities[cityIndex]];// 代理方法自动改变城市时,在底部label显示被选中的省和城市文字
return province.cities[row];
}
}
- (void)displayProvince:(NSString *)province AndCity:(NSString *)city
{
self.displayView.text = [NSString stringWithFormat:@"%@ - %@", province, city];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (component == 0) {
[self.pickerView reloadComponent:1]; // 刷新component,会自动调用数据源和代理的相关方法
[self.pickerView selectRow:0 inComponent:1 animated:YES];
} else {
int provinceIndex = [pickerView selectedRowInComponent:0];
int cityIndex = [pickerView selectedRowInComponent:1];
TXProvince *province = self.provinces[provinceIndex];
[self displayProvince:province.name AndCity:province.cities[cityIndex]]; // 通过鼠标改变城市时,在底部label显示被选中的省和城市文字
}
}
- (NSMutableArray *)provinces
{
if (_provinces == nil) {
NSMutableArray *provinceArray = [NSMutableArray array];
NSString *path = [[NSBundle mainBundle] pathForResource:@"cities.plist" ofType:nil];
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in dictArray) {
TXProvince *province = [TXProvince provinceWithDict:dict];
[provinceArray addObject:province];
}
_provinces = provinceArray;
}
return _provinces;
}
@end