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 方法 这里用于选择图片或的拍照回调 //调用相机拍照 或者 图库选 ...
随机推荐
- 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
权限控制方案 既然是后台权限管理系统,当然少不了权限控制啦,至于权限控制,前端方面当然就是对页面资源的访问和操作控制啦. 前端资源权限主要又分为两个部分,即导航菜单的查看权限和页面增删改操作按钮的操作 ...
- Quartz.NET的简单任务管理类
昨天使用Quartz.NET做了个定时任务的功能,并实现了多个定时任务的功能 下面这个类实现了如下功能: 1.对定时任务进行管理 2.创建定时任务,需要给定时任务一个job的名称 3.判断给定的job ...
- 第6章 Selenium2-Java 自动化测试模型
6.1 自动化测试模型介绍 6.1.1 线性测试 :其实就是单纯地来模拟用户完整的操作场景. 优势就是每一个脚本都是完整且独立的: 缺陷测试用例的开发与维护成本很高. 6.1.2 模块化驱动 ...
- thinkphp的自动生成
第一,在index.php里定义 define('BIND_MODULE','Admin'); //自动生成Admin目录下的结构(默认生成IndexController) define('BUILD ...
- C语言指针基本操作
C语言指针基本操作 指针 指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...
- 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
项目中我们常常会碰到一些数据,需要高频率用到但是又不会频繁变动的这类,我们就可以使用缓存把这些数据缓存起来(比如说本项目的导航数据,帖子频道数据). 我们项目中常用到有Asp.Net Core 本身提 ...
- 阿里云 Ubuntu16.04 apache2 ssl证书下载与安装(必须有域名)
阿里云申请免费SSL证书并下载(包含xxx.key|xxx._root_bundle.crt|xxx._public.crt三个文件) 用https是自己的网站收到保护,不易被攻克,所以保护自己的网站 ...
- 比较两个DataTable是否相等
/// <summary> /// 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容 /// </summary> ...
- MVC架构介绍—查询功能的开发
select和from语句 注意:select和from可以不设置,默认情况下: select获取映射表的所有字段: from获取实体映射表的表名:如果设置select则必须设置frorm,但是允许仅 ...