iOS-省市区选择的实现
一、简介
该文主要实现的是省市区的选择,可在个人修改地址的地方使用。
二、需要的东西
制作这个首先需要一个area.plist文件,该文件中保存这所有的关于省市区的信息,下载地址:http://pan.baidu.com/s/1qWFPf8g。
三、制作原理
通过一个UIPickerView来显示,将UIPickerView分成三部分,省、市、区。进而加载数据。
四、实现效果
图片展示:
五、具体实现步骤:
1、首先,新建一个Single View APplication,然后在Storyboard中添加一个UIpicker View
,
2、实现UIPicker View的代理方法 --这里的数据是暂时的,还没添加数据
#pragma mark - UIPickerViewDelegate /** *返回每一列的数据个数 */ -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if(component==) { return ; }else if (component==) { return ; }else { return ; } } /** *返回pickerView分几列,因为是省市区选择,所以分3列 */ -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return ; } /** *触发的事件 */ -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { NSLog(@"ss"); } /** *通过自定义view去显示pickerView中的内容,这样做的好处是可以自定义的调整pickerView中显示内容的格式 */ -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *myView = nil; myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, , )]; myView.textAlignment = NSTextAlignmentCenter; myView.font = [UIFont systemFontOfSize:]; //用label来设置字体大小 if (component==) { myView.text = @""; }else if (component==) { myView.text = @""; }else { myView.text = @""; } return myView; }
3、接下来就是把刚才下载的那个area.plist文件中的数据加入到picker View中
①、首先定义三个NSArray。
NSArray *provinceArr,*cityArr,*areaArr;
②、先设置provinceArr.cityArr,areaArr.
provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]]; cityArr = [[provinceArr objectAtIndex:] objectForKey:@"cities"]; areaArr = [[cityArr objectAtIndex:] objectForKey:@"areas"];
默认的province列先显示的第一列,此时刚好让city显示第一列的city,让area显示第一个city的area。
注:(此处这样设置是因为这个area.plist文件的结构的原因,你可以自己看一下这个plist文件)。
4、此时数据便有了,但是当滚动第一列时,第二列和第三列都没有变化,其实本质上就是在设置pickerView内容的代理方法中设置内容改变。重头戏来了。--修改上面的这个代理方法。
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component==) { //当是省的时候 cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; if ([cityArr count]!=) { areaArr = [[cityArr objectAtIndex:] objectForKey:@"areas"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; } } else if (component==) { areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; } } 注:不要忘了重新设置每一列的数据个数 if (component==) { return [provinceArr count]; }else if(component==) { return [cityArr count]; }else { return [areaArr count]; }
5、附加:
获取三列的内容 province= [[provinceArr objectAtIndex:[self.areaPicker selectedRowInComponent:]] objectForKey:@"state"]; //获取province city= [[cityArr objectAtIndex:[self.areaPicker selectedRowInComponent:]] objectForKey:@"city"]; if ([areaArr count]!=) { area = [areaArr objectAtIndex:[self.areaPicker selectedRowInComponent:]]; }
6、完成,附上源码。(故事版上的设置大家自己设置就行了)
// // ViewController.m // ProvinceCityDownTownChoose // // Created by xiaoguizi on 15/2/9. // Copyright (c) 2015年 xiaoguizi. All rights reserved. // ------.m文件------ #import "ViewController.h" @interface ViewController () { NSArray *provinceArr,*cityArr,*areaArr; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]]; cityArr = [[provinceArr objectAtIndex:] objectForKey:@"cities"]; areaArr = [[cityArr objectAtIndex:] objectForKey:@"areas"]; } #pragma mark - UIPickerViewDelegate /** *返回每一列的数据个数 */ -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component==) { return [provinceArr count]; }else if(component==) { return [cityArr count]; }else { return [areaArr count]; } } /** *返回pickerView分几列,因为是省市区选择,所以分3列 */ -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return ; } /** *触发的事件 */ -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component==) { cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; if ([cityArr count]!=) { areaArr = [[cityArr objectAtIndex:] objectForKey:@"areas"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; } } else if (component==) { areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"]; [pickerView selectRow: inComponent: animated:NO]; [self.areaPicker reloadComponent:]; } } /** *通过自定义view去显示pickerView中的内容,这样做的好处是可以自定义的调整pickerView中显示内容的格式 */ -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *myView = nil; myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, , )]; myView.textAlignment = NSTextAlignmentCenter; myView.font = [UIFont systemFontOfSize:]; //用label来设置字体大小 if (component==) { myView.text =[[provinceArr objectAtIndex:row] objectForKey:@"state"]; }else if (component==) { myView.text =[[cityArr objectAtIndex:row] objectForKey:@"city"]; }else { myView.text =[areaArr objectAtIndex:row]; } return myView; } @end ------.h文件------ // // ViewController.h // ProvinceCityDownTownChoose // // Created by xiaoguizi on 15/2/9. // Copyright (c) 2015年 xiaoguizi. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate> @property (weak, nonatomic) IBOutlet UIPickerView *areaPicker; @end
iOS-省市区选择的实现的更多相关文章
- IOS 如何选择delegate、notification、KVO?
IOS 如何选择delegate.notification.KVO? 博客分类: IOS 前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有 ...
- iOS解析XML实现省市区选择
1.具体内容就不再赘述了.直接看关键代码. viewController.h // // ViewController.h // ParseXmlToRealizeChooseCityDemo // ...
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- IOS 如何选择delegate、notification、KVO?(转)
前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在网上看到一个博客上详细 ...
- js三级省市区选择
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- IOS 日期选择
传统方式 一般情况下弹出日期选择的场景是:用户点击UITextField弹出日期选择,关键代码如下: 点击UITextField弹出日期选择 1 2 3 UITextField *textField; ...
- OS X升级到10.11后Xcode6.4界面无iOS device选择栏的解决办法
原来在Xcode6.4项目运行按钮右侧会有一个可以选择设备或模拟器的选择栏,但是升级后没有了.但是Xcode7.0.1打开同样的项目会有显示. 简单找了一下无果后,发现咋Xcode顶部菜单里可以找到切 ...
- iOS 载入图片选择imageNamed 方法还是 imageWithContentsOfFile?
Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其參数为图片的名字. 2. imageWithContentsOfFile,其參数也是图片文件的路径. 那 ...
- iOS 可选择的购物车
最近看了淘宝的购物车,于是做了一个可选择的购物车模板. 如果有好的建议请提出,带我日后更新.
- ios uiimagepickercontroller 选择相册或者拍照上传
首先需要实现UIImagePickerControllerDelegate 代理 实现其imagePickerController 方法 这里用于选择图片或的拍照回调 //调用相机拍照 或者 图库选 ...
随机推荐
- kali网卡配置文件
kali的网卡配置文件为/etc/network/interfaces 下面定义了lo.eth0和eth1的配置 auto lo # auto表示开机启动该网卡设备 iface lo inet loo ...
- Shell 示例:将指定的文件内容转换为大写
程序代码如下: #!/bin/bash # 将一个指定的输入文件内容转换为大写 E_FILE_ACCESS=70 E_WRONG_ARGS=71 if [ ! -r "$1" ] ...
- AngularJS初始化Select选择框
一.引入 之前一个离职的同事负责的项目大量的引入了AngularJS的JS框架,后来我接手相关他项目里的功能.由于对AngularJS不是太熟,在他的功能上进行二次开发就比较费劲了,印象比较深的一个就 ...
- SignalR 自寄宿
源代码 https://github.com/xlb378917466/Chat.Server 1.使用控制台程序来寄宿SignalR的服务端,这需要借助于Owin中间件, 2.实现一个服务端的Cha ...
- jQuery 小特效【文本框折叠隐藏,展开显示】【下拉菜单】【颜色渐变】【弹窗+遮罩】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- 在EF中执行SQL语句(转载)
在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...
- 【Java并发编程】15、ReentrantLock实现原理深入探究
原文已经写得非常详细了,直接把大神的文章转发过来了 https://www.cnblogs.com/xrq730/p/4979021.html 前言 这篇文章被归到Java基础分类中,其实真的一点都 ...
- PHP FastCGI进程管理器PHP-FPM的架构
一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程.每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态 ...
- 设计模式之策略模式(Strategy)
策略模式将不同算法的逻辑抽象接口封装到一个类中,通过组合和多态结合的方式来进行不同算法具体的实现. 作用 策略模式是一种定义一系列算法的方法,Strategy类层次为Context定义了一系列的可重用 ...
- js-Higher-base.js
// 1.基于原型链的继承 // 继承属性 // 当访问一个对象的属性时发生的行为: // 假定有一个对象 o, 其自身的属性(own properties)有 a 和 b: {a: 1, b: 2} ...