1、首先,对UIPickerView绑定Delegate和DataSource到相应的ViewController。此处不再赘述。可以用代码或者Interface界面设置。
2、首先实现数据的初始化。
(1)在.h文件中定义如下变量。其中provinces_cities.plist请见附件。
- @interface IkrboyViewController : UIViewController{
- NSDictionary *dict;
- NSArray *provinceArray;
- NSArray *cityArray;
- }
(2)在.m的viewDidLoad方法中加上初始化数据的处理。具体处理在initPicker方法
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- [self initPicker];
- }
-
- -(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]);
- }
3、将数据绑定到UIPickerView
- - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
- return 2;
- }
- - (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];
- }
- }
4.随时监听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);
- }
- }
uipicker对省市的遍历
原文:http://www.cnblogs.com/anjiubo/p/5293378.html