`

IOS之简单选择器UIPickerView(省份+城市)

 
阅读更多

        先介绍一下我们要实现什么功能。有1个选择器,有左右两个轮子,做轮子选择省份,右轮子选择城市,其中选择省份时,右边的城市会自动更新。


 

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];
	// 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]);
}

 3、将数据绑定到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];
	}
}

 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);
    }
}

 附加说明:利用下面的代码,获得UIPickerView的不同Component(滚轮)的选中的index。

    NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];
    NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1];

 

  • 大小: 32.4 KB
5
6
分享到:
评论
4 楼 xianwubiao 2015-03-31  
坑爹。。。。。
3 楼 ajxjwha 2014-08-25  
获取的总是空,为什么?!
2 楼 ikrboy 2014-08-07  
小红星凯 写道
找不到pickview 那个协议怎么搞?步骤写得不太详细,pickview报错。

因为我用的是storyboard所以在头文件没有显示pickview协议,抱歉,建议头文件添加UIPickerViewDelegate, UIPickerViewDataSource,然后在初始化UIPickerView 之后,添加pickerView.delegate=self;
1 楼 小红星凯 2014-07-28  
找不到pickview 那个协议怎么搞?步骤写得不太详细,pickview报错。

相关推荐

    ios-城市选择器.zip

    在iOS开发中,城市选择器通常用于用户输入他们的出生地、居住地或当前所在城市等信息。这个"ios-城市选择器.zip"压缩包提供的是一个已经封装好的解决方案,旨在简化开发者在项目中集成城市选择功能的过程。下面我们...

    ios UIPickerView 中国省市区选择器

    在给定的标题“ios UIPickerView 中国省市区选择器”中,我们可以推断出这个项目是关于如何使用`UIPickerView` 创建一个能够帮助用户选择中国省份、城市、区县的组件。这种选择器在本地化应用或者地址输入场景中非常...

    UIPickerView 城市两级选择

    然后,当用户在第一级选择省份时,第二级的`UIPickerView`会自动更新为对应省份的城市。 自定义封装`CityPickerView`的过程包括以下步骤: 1. 创建一个新的UIView子类,如`CityPickerView`,并添加两个`...

    iOS程序选择器

    在本文中,我们将深入探讨UIPickerView的使用、城市选择器的实现以及与之相关的iOS开发知识点。 1. **UIPickerView介绍** UIPickerView是iOS SDK中的一个控件,它提供了一个滚动的选择界面,用户可以通过上下滚动...

    ios-省市区选择器(UIPickerView).zip

    在这个“ios-省市区选择器(UIPickerView)”项目中,开发者创建了一个自定义的PickerView,专门用于选择中国的省份、城市和区县。这个组件对于需要用户输入地址信息的应用来说非常实用。 首先,UIPickerView的基本...

    ios UIPickerView封装的中国省/市/区地址选择器 ,含有中国最新城市plist文件

    这个选择器不仅包含了基本的`UIPickerView`功能,还特别整合了最新的中国城市数据,这些数据存储在一个`plist`文件中。 首先,让我们深入了解`UIPickerView`。`UIPickerView`是苹果iOS SDK中的一种用户界面元素,它...

    iOS开发之UIPickerView实现城市选择器的步骤详解

    在本教程中,我们将详细讲解如何使用UIPickerView 实现一个城市选择器,该选择器分为两列,第一列显示省份,第二列显示对应省份的城市。我们将数据存储在一个名为“cityData”的plist文件中。 首先,我们需要了解...

    iOS城市选择器

    在iOS应用开发中,"iOS城市选择器"是一个常见的组件,用于帮助用户便捷地选取国家和城市。这个组件通常会从本地数据源获取信息,并显示在一个优化过的UI控件,如PickView,来提供良好的用户体验。在这个场景中,...

    iOS(Swift)——三级列表城市选择器(可以是N级列表)

    本篇将深入探讨如何使用Swift和UIPickerView构建一个三级(甚至更多级)的城市选择器。 首先,我们需要了解UIPickerView的基本概念。UIPickerView是iOS中的一个滚动选择视图,用户可以通过滚动选取列表中的某一值。...

    ios-多级地区选择器.zip

    在iOS开发中,一个“多级地区选择器”通常用于应用程序中,允许用户逐级选择他们的地理位置,例如国家、省份、城市等。这样的组件对于需要收集用户详细地址信息的应用非常有用,比如电子商务、物流配送或者地图应用...

    ios-4级城市选择器.zip

    在iOS开发中,一个常见的需求是实现用户可以选择国家、省份、城市、区县等多级信息的功能,这通常被称为四级城市选择器。本项目提供的"ios-4级城市选择器.zip"就是一个基于UIPickerView实现的此类功能。UIPickerView...

    ios-仿京东地址选择器.zip

    地址选择器通常由多个层次组成,例如省份、城市、区县以及街道等,用户逐级选择或输入,确保地址的精确性。在这个自定义组件中,"ZHFJDAddress"可能包含了实现这一功能的源代码、资源文件以及示例项目。 首先,这个...

    ios-省市区地址选择器.zip

    标题中的"ios-省市区地址选择器.zip" 提供了一个专门针对中国用户设计的组件,它是一个用于选择省份、城市和区县的地址选择器。这样的组件通常在需要用户输入详细收货地址或设置地理位置的场景中非常实用,例如电商...

    ios-一个非常方便使用的省市区域地址选择器.zip

    这个库的核心功能是为应用程序添加一个可定制的,包含全国所有省份、城市和县区的地址选择器,帮助用户快速选择并输入地址信息。 首先,让我们了解一下这个选择器的主要特点: 1. **数据完整**:...

    ios-纯代码封装城市选择器.zip

    这个"ios-纯代码封装城市选择器.zip"提供的就是一个无需界面设计文件(如Storyboard或XIB),仅通过代码实现的城市选择器组件。在本文中,我们将详细探讨如何使用纯代码来封装和实现这样一个功能,以及相关的iOS开发...

    ios 相互关联的多列选择器

    综上所述,实现iOS中的相互关联的多列选择器涉及到UIPickerView的使用、数据源的管理、事件监听以及可能的第三方库集成。通过这些技术,我们可以为用户提供一个直观、高效的多级筛选界面,提升应用的交互性和实用性...

Global site tag (gtag.js) - Google Analytics