UIPickerView实现省 市 区三级联动

前几天用UIPickerView实现了一下三级联动具体的如下图

下面是实现方式

#import "ViewController.h"

#define FirstComponent 0

#define SubComponent 1

#define ThirdComponent 2

@interface ViewController ()

@property(nonatomic,retain)NSDictionary* dict;

@property(nonatomic,retain)NSArray* pickerArray;

@property(nonatomic,retain)NSArray* subPickerArray;

@property(nonatomic,retain)NSArray* thirdPickerArray;

@property(nonatomic,retain)NSArray* selectArray;

@end

@implementation ViewController

@synthesize dict=_dict;

@synthesize pickerArray=_pickerArray;

@synthesize subPickerArray=_subPickerArray;

@synthesize thirdPickerArray=_thirdPickerArray;

@synthesize selectArray=_selectArray;

- (void)viewDidLoad

{

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSString* plistPath=[[NSBundle mainBundle] pathForResource:@"Address" ofType:@"plist"];

_dict=[[NSDictionary alloc] initWithContentsOfFile:plistPath];

self.pickerArray=[_dict allKeys];

self.selectArray=[_dict objectForKey:[[_dict allKeys] objectAtIndex:0]];

if ([_selectArray count]>0) {

self.subPickerArray= [[self.selectArray objectAtIndex:0] allKeys];

}

if ([_subPickerArraycount]>0)
{

self.thirdPickerArray=[[self.selectArray objectAtIndex:0] objectForKey:[self.subPickerArray objectAtIndex:0]];

}

}

- (void)didReceiveMemoryWarning

{

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark --

#pragma mark--UIPickerViewDataSource

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

return3;

}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

{

if (component==FirstComponent) {

return [self.pickerArray count];

}

if (component==SubComponent) {

return [self.subPickerArray count];

}

if (component==ThirdComponent) {

return [self.thirdPickerArray count];

}

return0;

}

#pragma mark--

#pragma mark--UIPickerViewDelegate

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
forComponent:(NSInteger)component

{

if (component==FirstComponent) {

return [self.pickerArray objectAtIndex:row];

}

if (component==SubComponent) {

return [self.subPickerArray objectAtIndex:row];

}

if (component==ThirdComponent) {

return [self.thirdPickerArray objectAtIndex:row];

}

return
nil;

}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component

{

NSLog(@"row is %d,Component is %d",row,component);

if (component==0) {

self.selectArray=[_dict objectForKey:[self.pickerArray objectAtIndex:row]];

if ([self.selectArray count]>0)
{

self.subPickerArray= [[self.selectArray objectAtIndex:0] allKeys];

}else{

self.subPickerArray=nil;

}

if ([self.subPickerArraycount]>0)
{

self.thirdPickerArray=[[self.selectArray objectAtIndex:0] objectForKey:[self.subPickerArray objectAtIndex:0]];

}else{

self.thirdPickerArray=nil;

}

[pickerView selectedRowInComponent:1];

[pickerView reloadComponent:1];

[pickerView selectedRowInComponent:2];

}

if (component==1) {

if ([_selectArraycount]>0&&[_subPickerArraycount]>0)
{

self.thirdPickerArray=[[self.selectArray objectAtIndex:0] objectForKey:[self.subPickerArray objectAtIndex:row]];

}else{

self.thirdPickerArray=nil;

}

[pickerView selectRow:0 inComponent:2 animated:YES];

}

[pickerView reloadComponent:2];

}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

{

if (component==FirstComponent) {

return90.0;

}

if (component==SubComponent) {

return120.0;

}

if (component==ThirdComponent) {

return100.0;

}

return0;

}

-(void)dealloc

{

self.dict=nil;

self.pickerArray=nil;

self.subPickerArray=nil;

self.thirdPickerArray=nil;

self.selectArray=nil;

[superdealloc];

}

@end

时间: 2024-10-07 14:02:43

UIPickerView实现省 市 区三级联动的相关文章

html实现 省——市——区三级联动

html实现  省--市--区三级联动 html中实现三级联动是一个不错的demo,博主在这里跟大家分享一下实现的过程,以及自己在过程中出现的一些问题,仅供参考. 首先我们将全国的省市区数据导入进来,这里已经直接整理搜集好了.如下: var provinceList = [ {name:'北京', cityList:[ {name:'市辖区', areaList:['东城区','西城区','崇文区','宣武区','朝阳区','丰台区','石景山区','海淀区','门头沟区','房山区','通州区

省、市、区 三级联动,Vue+SpringDataJpa实现

1.使用elementui中的下拉框 注意:这里都是使用前后端分离的模式来写的,所以需要安装好node.js和vue的环境 1.数据库文件,完整文件:https://files.cnblogs.com/files/autonomy/%E7%9C%81%E5%B8%82%E4%B8%89%E7%BA%A7%E8%81%94%E5%8A%A8.rar a>省份 1 DROP TABLE IF EXISTS `t_address_province`; 2 CREATE TABLE `t_address

Android开发之解析XML并实现三级联动效果

请尊重他人的劳动成果,转载请注明出处:Android开发之解析XML并实现三级联动效果 本实例主要应用XmlPullParser解析XML文档中的省市区,然后将数据绑定到Spinner上实现三级联动的效果.关于XmlPullParser的详解大家可以参考<Android开发之使用PULL解析和生成XML>一文. 运行效果图: 程序代码: 核心代码: <pre name="code" class="java">package com.jph.s

封装标签省,市,县。三级联动

package com.jy.modules.tld; import com.jy.platform.api.sysarea.SysAreaAPI; import java.io.IOException; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.J

angularjs服务json文件实现省市区三级联动

最近刚做完一个项目,其中就有一功能点就是让用户填写信息时下拉选择省市区. 实现这个功能可以选择将全国的省市区数据全部存到数据库中,但是太复杂了,读取速度慢.每次都需要加载且对数据库造成负担,所以较为稳妥且简洁的方式就是将数据放在前端页面中. 其中,可以使用jQuery.angularjs或者将两者结合,本例将采用angularjs读取json文件的方式实现,其中将全部的省市区数据放在json文件中. 由于省市区json文件数据比较多,我们先展示效果,将代码放在后面与大家分享. 在此特别声明, 有

AJAX实现三级联动

省市区三级联动插件: 主页面:为方便使用,不用写过多代码,只写一个id为sanji的div,若别的页面要用,只需写一个id为sanji的div,加载上jQuery与sanji.js文件即可 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml

Ajax无刷新(二)三级联动

1 写一个公用页面 2 <% 3 String path = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath(); 4 System.out.println(path); 5 request.setAttribute("path",path); 6 %> 1 其他页面需要绝对路径的话

WinForm Timer控件,三级联动[省,市,区]

Timer控件: 组件中的最后一个控件,功能是可以根据用户自定义的时间间隔来触发时间,不会印象窗体本身的其他事件进行. 属性: Enable  设置控件是否启用 Interval  设置事件的频率,以毫秒为单位 事件只有一个:Tick事件 例:使用timer控件获取当前时间并即时变动 private void timer1_Tick(object sender, EventArgs e) { label1.Text = DateTime.Now.ToString("yyyy年MM月dd日hh时m

ajax实现省、市、区、三级联动(例题)

题目要求: 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下拉跟着变化,市级下拉变化时区下拉跟着变化. 使用chinastates表查询 主界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo