29,028
社区成员
发帖
与我相关
我的任务
分享
//
// ViewController.m
// PickerDemo
//
// Created by Charles on 14-7-2.
// Copyright (c) 2014年 Syncbox. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
typedef NS_ENUM(NSInteger, ComponentType) {
ComponentProvince,
ComponentCity,
ComponentMailCode,
};
@implementation ViewController {
__weak IBOutlet UIPickerView* thePickerView;
NSDictionary* data;
NSArray* provinces;
NSArray* citys;
NSArray* mailCodes;
NSString* selectedProvice;
NSString* selectedCity;
}
- (void)viewDidLoad
{
[super viewDidLoad];
data = @{
@"广东": @{
@"广州": @[@"510000", @"510001", @"510003"],
@"化州": @[@"123456", @"123457", @"123458"],
},
@"湖南": @{
@"郴州": @[@"444444", @"444441", @"444445"],
@"长沙": @[@"222222", @"222223", @"222224"],
}
};
provinces = [data allKeys];
[thePickerView reloadAllComponents];
[self manuallySelectRow:0 inComponent:ComponentProvince];
}
- (void)manuallySelectRow:(NSInteger)row inComponent:(NSInteger)component {
[thePickerView selectRow:0 inComponent:component animated:YES];
[self pickerView:thePickerView didSelectRow:0 inComponent:component];
}
- (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
switch (component) {
case ComponentProvince:
selectedProvice = provinces[row];
citys = [data[selectedProvice] allKeys];
break;
case ComponentCity:
selectedCity = citys[row];
mailCodes = data[selectedProvice][selectedCity];
break;
case ComponentMailCode:
// 选中邮编时,不需要联动
default:
break;
}
if (component==ComponentProvince || component==ComponentCity) {
NSInteger nextComponent = component+1;
[pickerView reloadComponent:nextComponent];
[self manuallySelectRow:0 inComponent:nextComponent];
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 3;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
switch (component) {
case ComponentProvince:
return provinces.count;
case ComponentCity:
return citys.count;
case ComponentMailCode:
return mailCodes.count;
}
return 0;
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
switch (component) {
case ComponentProvince:
return provinces[row];
case ComponentCity:
return citys[row];
case ComponentMailCode:
return mailCodes[row];
}
return nil;
}
@end