@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. https://github.com/chenghuige/tensorflow-exp/blob/master/examples/sparse-tensor-classification/

        https://github.com/chenghuige/tensorflow-exp/blob/master/examples/sparse-tensor-classification/ ...

  2. js == 与 === 的区别

    1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...

  3. CozyRSS开发记录20-CanResizeWithGrip

    CozyRSS开发记录20-CanResizeWithGrip 1.窗口样式 首先,WindowStyle有四种: 然后,对于窗口缩放的ResizeMode,也有四种,CanResize和CanRes ...

  4. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  5. abstract与interface的区别

    abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...

  6. 十个免费的web应用安全检测工具

    Websites are getting more and more complex everyday and there are almost no static websites being bu ...

  7. TFS 分支导致nuget项目依赖丢失

    问题: 项目的代码 在tfs上分支后,签出项目.编译时发现无法编译,原有的nuget来的包的dll都丢失了(项目签入时,默认会忽略dll) 在网上找了下,发现一个简单的解决方法: 在"程序包 ...

  8. [资料分享]尚硅谷JavaWeb

    下载链接: 链接:https://pan.baidu.com/s/1pKMclsv 密码:8fbh

  9. 记录同事的一个bug-ajax-413错误-fullhead

    症状表现为在form下面的textarea里的字符数只有几十个的时候,请求可以成功,但是如果有几百字,则会出现413错误,提示fullhead,我第一反应是cookie体积太小,但是清了缓存还是一样的 ...

  10. Unity3D 脚本编译器无法关联VisualStudio2012解决办法

    开发环境:Win8 + Unity 4.34f1 +Visual Studio2012 旗舰版 解决办法:   1.创建一个start.bat文件,内容为:[start "" %* ...