@interface IkrboyViewController : UIViewController{
NSDictionary *dict;//用於存儲省份-城市的數據
NSArray *provinceArray;//省份的數組
NSArray *cityArray;//城市的數組,在接下來的代碼中會有根據省份的選擇進行數據更新的操作
}
在.m的viewDidLoad方法中加上初始化數據的處理。具體處理在initPicker方法
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self initPicker];
}
//初始化PickerView使用的數據源
-(void)initPicker{
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"provinces_cities" ofType:@"plist"];
dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
provinceArray = [dict allKeys];
NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];
NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex];
cityArray = [dict objectForKey:seletedProvince];
NSLog(@"%d",[provinceArray count]);
}
將數據綁定到UIPickerView
//以下3個方法實現PickerView的數據初始化
//確定picker的輪子個數
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 2;
}
//確定picker的每個輪子的item數
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
if (component == 0) {//省份個數
return [provinceArray count];
} else {//市的個數
return [cityArray count];
}
}
//確定每個輪子的每一項顯示什麼內容
#pragma mark 實現協議UIPickerViewDelegate方法
-(NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (component == 0) {//選擇省份名
return [provinceArray objectAtIndex:row];
} else {//選擇市名
return [cityArray objectAtIndex:row];
}
}
隨時監聽UIPickerView的滾動。
//監聽輪子的移動
- (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component == 0) {
NSString *seletedProvince = [provinceArray objectAtIndex:row];
cityArray = [dict objectForKey:seletedProvince];
//重點!更新第二個輪子的數據
[self.pickerView reloadComponent:1];
NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1];
NSString *seletedCity = [cityArray objectAtIndex:selectedCityIndex];
NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity];
NSLog(@"%@",msg);
}
else {
NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];
NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex];
NSString *seletedCity = [cityArray objectAtIndex:row];
NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity];
NSLog(@"%@",msg);
}
}
利用下面的代碼,獲得UIPickerView的不同Component(滾輪)的選中的index
NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];
NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1];