@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad]; _item1 = [[NSArray alloc]initWithObjects:@"大类1",@"大类2", nil];
_item2 = [NSDictionary dictionaryWithObjectsAndKeys:@[@"子类11",@"子类12"],@"大类1",@[@"子类21",@"子类22"],@"大类2",nil];
_item3 = [NSDictionary dictionaryWithObjectsAndKeys:@[@"条目111",@"条目112"],@"子类11",@[@"条目121",@"条目122"], @"子类12",nil]; _pickview = [[UIPickerView alloc]init];
_pickview.dataSource = self;
_pickview.delegate = self; _pickview.frame = CGRectMake(, , , );
_pickview.showsSelectionIndicator = YES; [self.view addSubview:_pickview]; } // UIPickerViewDataSource协议必须实现的方法
// 确认该控件有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
return ;
} //UIPickerViewDataSource协议必须实现的方法
//返回当前列显示的行数
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if( == component){
return _item1.count;
}else if( == component){
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = [_item2 valueForKey:item1Name]; return array.count;
}else if( == component){
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = _item2[item1Name];
NSInteger item2 = [_pickview selectedRowInComponent:];
NSString *item2Name = array[item2];
NSArray *array2 = _item3[item2Name];
return array2.count;
}else{
return ;
}
} //UIPickerViewDelegate协议要求实现
//返回当前行的内容,此处是将数组中数值添加到滚动的那个显示栏上
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if( == component){
return _item1[row];
}else if( == component){
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = _item2[item1Name];
return array[row];
}else if( == component){
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = _item2[item1Name];
NSInteger item2 = [_pickview selectedRowInComponent:];
NSString *item2Name = array[item2];
NSArray *array2 = _item3[item2Name];
return array2[row];
}else{
return NULL;
}
} //获取选择的数据
//监听轮子的移动
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if( == component){
//重新加载第二列的数据
NSLog(@"%@", _item1[row]);
[_pickview reloadComponent:];
}else if( == component){
//重新加载第三列的数据
[_pickview reloadComponent:];
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = _item2[item1Name];
NSLog(@"%@", array[row]);
}else if( == component){
NSInteger item1 = [_pickview selectedRowInComponent:];
NSString *item1Name = _item1[item1];
NSArray *array = _item2[item1Name];
NSInteger item2 = [_pickview selectedRowInComponent:];
NSString *item2Name = array[item2];
NSArray *array2 = _item3[item2Name];
NSLog(@"%@", array2[row]);
}
} //工具函数,遍历字典
-(void)describeDictionary:(NSDictionary *)dict
{
NSArray *keys;
int i, count;
id key, value; keys = [dict allKeys];
count = [keys count];
for (i = ; i < count; i++)
{
key = [keys objectAtIndex: i];
value = [dict objectForKey: key];
NSLog (@"Key: %@ for value: %@", key, value);
}
} @end

UI控件(UIPickerView)的更多相关文章

  1. 【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )

    转载注明出处 : http://blog.csdn.net/shulianghan/article/details/50348982 一. 日期选择器 (UIDatePicker) UIDatePic ...

  2. ios 中的UI控件学习总结(1)

    UIKit框架提供了非常多功能强大又易用的UI控件 下面列举一些在开发中可能用得上的UI控件 UIButton 按钮 UILabel 文本标签 UITextField 文本输入框 UIImageVie ...

  3. UI控件概述

    常见UI控件 UIKit框架提供了非常多功能强大又易用的UI控件,以便于开发者打造出各式各样的App 以下列举一些在开发中常见的UI控件(稍后补上图片示例) 1.UILabel– 文本标签:作用是显示 ...

  4. iOS:选择器控件UIPickerView的详解和演示

    选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...

  5. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  6. WinForm/Silverlight多线程编程中如何更新UI控件的值

    单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...

  7. 富客户端 wpf, Winform 多线程更新UI控件

    前言 在富客户端的app中,如果在主线程中运行一些长时间的任务,那么应用程序的UI就不能正常相应.因为主线程要负责消息循环,相应鼠标等事件还有展现UI. 因此我们可以开启一个线程来格外处理需要长时间的 ...

  8. UI控件(复习一下)

    如何修改控件状态• 可见,确实需要经常修改控件状态• 那如何去修改控件的状态呢?方法很简单➢ 每一个UI控件都是一个对象➢ 修改UI控件的状态,其实就是修改控件对象的属性➢ 比如修改UILabel显示 ...

  9. IOS学习资源收集--开发UI控件相关

    收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文 ...

  10. 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架

    <深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...

随机推荐

  1. 用python实现一个不排序的列表功能

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  2. CSS系列:在HTML中引入CSS的方法

    HTML与CSS是两个作用不同的语言,它们同时对一个网页产生作用,因此必须将CSS与HTML链接在一起使用.在HTML中,引入CSS的方法主要有4种:行内式.内嵌式.导入式和链接式. 1. 行内式 行 ...

  3. [转]DDD领域驱动设计基本理论知识总结

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  4. PHPCMS_V9 模型字段添加单文件上传功能

    后台有“多文件上传”功能,但是对于有些情况,我们只需要上传一个文件,而使用多文件上传功能上传一个文件,而调用时调用一个文件URL太麻烦了. 使用说明: 1.打开phpcms\modules\conte ...

  5. Ajax ContentType 列表大全

    ".*"="application/octet-stream" ".001"="application/x-001" & ...

  6. sorl入门

    本教程是从别人的基础上借鉴整理的 Solr是一个独立的企业级搜索应用服务器,它对外提供API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引(solr生成倒排索引,数 ...

  7. 同一台电脑上多个myeclipse破解的问题

    因为项目版本的问题,电脑上不得装了个myeclipe10版本的,但是破解之后,原来电脑上的myeclipse2014却显 示没有激活,好吧,我又去把myeclipse2014重新激活了一遍,但是到了m ...

  8. JS操作Json

    因为我水啊 所以我就要手打一下 熟悉一下 ===== JSON 全称 JavaScript Object Notation(标记) 一种轻量级的数据交互格式,采用完全独立于语言的文本格式 同事JSON ...

  9. 我的前端故事----疯狂倒计时(requestAnimationFrame)

    很久没有更新博客了...为了双十一准备了不少活动,终于结束了,有时间静静的坐下来总结一下了,在活动中最常用的就是倒计时了,晚上也有很多倒计时的例子了,那么今天带来的是一个新的方法和思路. 既然要介绍新 ...

  10. 懒加载lazyload

    什么是懒加载 懒加载就是当你做滚动到页面某个位置,然后再显示当前位置的图片,这样做可以减少页面请求. 懒加载:主要目的是作为服务器前端的优化,减少请求数或延迟请求数,一些图片非常多的网站中非常有用,在 ...