iOS基础-UIKit框架-高级视图-UIPickerView-实例2:城市选择(列与列之间有关系)

说明:事先已经准备好了一个NJProvince类,里面声明了2个属性name和cities,并创建和实现了快速创建类的动态方法和静态方法。直接导入即可。
0.创建一个plist文件,Root为Array,里面为字典(字典里为省份和城市)
1.加载这个plist文件
1>声明数组属性
@property(nonatomic,strong)NSArray *provinces;
2>懒加载(在实现文件最后面)
#pragma mark - 懒加载
-(NSArray *)provinces
{
if(_provinces == nil){
// 加载资源
NSArray *array = [NSArray arrayWithContetnsOfFile:[NSBundle mainBundle] pathForResource:@"cities.plist" ofType:nil]];
//将字典转换为模型
NSMutableArray *models = [NSMutableArray  arrayWithCapacity:array.count];

for(NSDcitionary *dict in array){
NJProvince *province = [NJProvince provinceWithDictionary:dict];
[models addObject:province];
   }
_provinces = [models copy];
  }
return _provinces;
}

1.在viewDidLoad中

//1.创建pickerview
//pickerView 有默认的frame
UIPickerView = *pickerView = [UIPickerView alloc] init];
//2.设置数据源和代理为控制器(并实现相关协议)
pickerView.dataSource = self;
pickerView.delegate = self;
[self.view addSubview:pickerView];
self.pickerView = pickerView[具体添加原因看下面]

2.实现数据源方法和代理方法
#pragma mark - 数据源方法
//告诉系统有多少列
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}

注意:为了得到pickView,先声明一个weak属性UIPickerView,并在viewDidLoad中添加self.pickerView = pickerView;
//告诉系统有多少行
-(NSInteger)pickerView:(UIPickerView *)pickerView  numberOfRowsInComponents:(NSInteger)component
{
if(0 == component){
//省份
return self.provinces.count;
} else { //城市
//0.获取第0列选中的行
NSInteger selectIndex = [self.pickerView selectedRowInComponent:0];
//1.根据第0列选中的行数获取对应省份(获取第一列选中行的模型)
NJProvince *province = self.provinces[selectIndex];
//2.获取对应省份的对应城市
NSArray *cities = province.cities;
//3.返回城市的个数
return cities.count;
}
}

#pragma mark - 代理方法
//告诉系统每一行显示什么内容
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponents:(NSInteger)component
{
if(0 == component){
//省份
return [self.provinces[row] name];
} else { //城市
//0.获取第0列选中的行
NSInteger selectIndex = [pickerView selectedRowInComponent:0];
//1.获取对应的省份
NJProvince *province = self.provinces[selectIndex];
//2.获取对应的城市
return province.cities[row];
}
}

根据选中的省份显示出对应的城市
//监听pickerView的选中
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
//判断是否修改了第0列(省份列)
if(0 == component){
//刷新第1列对应的数据
pickerVIew reloadComponent:1];
//让第1列滚动到第0行
[pickerView selectRow:0 inComponent:1 animated:YES];
}

时间: 2024-08-07 14:53:08

iOS基础-UIKit框架-高级视图-UIPickerView-实例2:城市选择(列与列之间有关系)的相关文章

iOS基础-UIKit框架-高级视图-UIPickerView-实例3:国家选择(图片)

说明:事先已经准备好了一个NJCountry类,里面声明了2个属性name和icon,并 创建和实现了快速创建类的动态方法和静态方法.直接导入即可.0.创建一个plist文件,Root为Array,里面为字典(字典里为国家和国旗)1.加载这个plist文件1>声明数组属性 @property(nonatomic,strong)NSArray *countries:2>懒加载(在实现文件最后面)#pragma mark - 懒加载-(NSArray *)countries{if(_countri

iOS基础-UIKit框架-高级视图-UIPickerView-实例1:点菜(列与列之间无关系)

一.点菜0.创建一个plist文件,Root为Array,里面包含3个数组,每个数组有一堆食物名称加载这个plist文件1>声明数组属性 @property(nonatomic,strong)NSArray *foods:2>懒加载(在实现文件最后面)#pragma mark - 懒加载-(NSArray *)foods{ if(_foods == nil){ NSString *fullPath = [[NSBundle mainBundle] pathForResource:@"

iOS基础-UIKit框架-基础视图-UIScrollView

一.什么是UIScrollView? 二.UIScrollView的基本使用

iOS基础-UIKit框架-多控制器管理-UINavigationController

一.导航控制器基本使用多控制器 导航控制器 导航控制器的简单使用1.创建一个空项目2.创建导航控制器nav3.设置导航控制器为Window的根控制器4.新建3个控制器类管理这3个View(勾上also create xib)在xib中添加一个标签用来注明是第几个控制器,添加一个按钮用来跳转到下一个控制器5.创建第一个控制器并添加到导航控制器中[nav pushViewController:one animated:YES]:6.监听用来跳转到第二个的按钮并实现方法-(IBAction)jump2

iOS基础-UIKit框架-多控制器管理-UITabBarController

UITabBarController UITabBarController的简单使用 一.UITabBarController的创建(利用代码)1.新建一个空项目,在MJAppDelegate.m的didFinishLaunch...方法中//1.创建tabbar控制器UITabBarController *tabbarVc = [[UITabBarController alloc] init]: //2.设置为window的根控制器self.window.rootViewController

iOS基础-UIKit框架-多控制器管理-Segue

一.什么是Segue? 二.Segue的属性 三.Segue的类型 四.自动型Segue(控件->控制器) 五.手动型Segue(控制器->控制器) 六.performSegueWithIdentifier:sender:

iOS基础-UIKit框架-多控制器管理-控制器创建和控制器view的创建

掌握 一.控制器的多种创建方式如何创建一个控制器 通过storyboard创建注意:加载UIStoryboard仅仅是加载名称叫做Test的storyboard,并不会创建 storyboard中的控制器以及控件 通过xib创建注意:要想让xib里的view设置为所创建控制器的view,必须设置xib的File's owner 为所创建控制器.并且File's owner点右键将view连到xib里的view上.storyboard默认已经完成了上述操作 二.控制器view的创建方式1.没有同名

iOS基础-UIKit框架-多控制器管理-Modal

Modal Modal效果 一.Modal演示(代码)1.事前准备1>新建一个空项目,删除默认控制器文件2>自定义2个控制器,将ViewController的Class分别设置为这个类3>创建一个window,将其根控制器设置为第一个自定义的控制器.2.拖一个按钮,监听这个按钮并实现方法(用来跳转到第二个界面)-(IBAction)jump{ //展示第二个控制器界面 MJTwoController *two = [[MJTwoViewController alloc] init]: [

MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于excel),用来存放多行内容/多条记录 5. 记录:事物一系列典型的特征 6. 数据:描述事物特征的符号 MySQL数据库就是一个套接字软件,用来管理其他机器上的数据文件 MySQL介绍: MySQL是一个关系型数据库管理系统:就是一个基于socket编写的C/S架构胡软件 客户端软件 mysql