接上篇iOS学习之UIPickerView控件的简单使用

接着上篇的代码 http://download.csdn.net/detail/totogo2010/4391870 ,我们要实现的效果如下:

当选择左边的一级选项时,左边展示一级选项里含有的二级选项,选择后显示在TextField里。

如何实现呢?建立一个和左边的列表key对应的数组,当选择这个key时,刷新左边UIPickerView部分的内容显示对应数组的数据,选择时,找到

两个UIPickerView部件rowIndex,找出数据,放到TextField里。

1、打开上篇PickerViewDemo项目,在ViewController.h添加两个成员变量:NSArray *subPickerArray; NSDictionary *dicPicker;

  1. #import <UIKit/UIKit.h>
  2. @interface ViewController : UIViewController<UIPickerViewDelegate, UITextFieldDelegate,UIPickerViewDataSource>
  3. {
  4. NSArray *pickerArray;
  5. NSArray *subPickerArray;
  6. NSDictionary *dicPicker;
  7. }
  8. - (IBAction)selectButton:(id)sender;
  9. @property (strong, nonatomic) IBOutlet UIToolbar *doneToolbar;
  10. @property (strong, nonatomic) IBOutlet UIPickerView *selectPicker;
  11. @property (strong, nonatomic) IBOutlet UITextField *textField;
  12. @end

2、初始化

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. pickerArray = [NSArray arrayWithObjects:@"动物",@"植物",@"石头", nil];
  5. dicPicker = [NSDictionary dictionaryWithObjectsAndKeys:
  6. [NSArray arrayWithObjects:@"鱼",@"鸟",@"虫子",            nil], @"动物",
  7. [NSArray arrayWithObjects:@"花",@"草",@"葵花",            nil], @"植物",
  8. [NSArray arrayWithObjects:@"疯狂的石头",@"花岗岩",@"鹅卵石", nil], @"石头",nil];
  9. subPickerArray = [dicPicker objectForKey:@"动物"];
  10. textField.inputView = selectPicker;
  11. textField.inputAccessoryView = doneToolbar;
  12. textField.delegate = self;
  13. selectPicker.delegate = self;
  14. selectPicker.dataSource = self;
  15. selectPicker.frame = CGRectMake(0, 480, 320, 216);
  16. }

给 NSDictionary *dicPicker;赋值,对应的三个关键字添加了对应的数组。

3、Component返回两个,这样就有两个齿轮了。

  1. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  2. return 2;
  3. }

4、使用宏

在#import "ViewController.h"下面定义两个宏,代表UIPickerView齿轮的左边的部分和右边的部分。左边的部分是0,右边的是1.

#import "ViewController.h"

#define kFirstComponent 0

#define kSubComponent 1

5、判断是那个齿轮,返回相应的数据的Count。

  1. -(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  2. if(component == kFirstComponent){
  3. return [pickerArray count];
  4. }else {
  5. return [subPickerArray count];
  6. }
  7. }

6、根据component返回相应的String数据

  1. -(NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  2. if(component == kFirstComponent){
  3. return [pickerArray objectAtIndex:row];
  4. }else {
  5. return [subPickerArray objectAtIndex:row];
  6. }
  7. }

7、拖动左边的齿轮时,右边的数据相应的Reload更新。

  1. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
  2. if (component == kFirstComponent) {
  3. subPickerArray = [dicPicker objectForKey:[pickerArray objectAtIndex:row]];
  4. [pickerView selectRow:0 inComponent:kSubComponent animated:YES];
  5. [pickerView reloadComponent:kSubComponent];
  6. }
  7. }

8、相应选择的数据,并显示在TextField上。

  1. -(void)textFieldDidEndEditing:(UITextField *)textField{
  2. NSInteger firstViewRow = [selectPicker selectedRowInComponent:kFirstComponent];
  3. NSInteger subViewRow = [selectPicker selectedRowInComponent:kSubComponent];
  4. NSString * firstString = [pickerArray objectAtIndex:firstViewRow];
  5. NSString * subString =  [[dicPicker objectForKey:[pickerArray objectAtIndex:firstViewRow]] objectAtIndex:subViewRow] ;
  6. NSString *textString = [[NSString alloc ] initWithFormat:@"您选择了:%@%@%@", firstString, @" 里的 ", subString];
  7. self.textField.text = textString;
  8. }
  9. - (IBAction)selectButton:(id)sender {
  10. [textField endEditing:YES];
  11. }

大功告成,运行,点击TextField,弹出:

最终代码:http://download.csdn.net/detail/totogo2010/4393004

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢

iOS学习之UIPickerView控件的关联选择的更多相关文章

  1. iOS学习之UIPickerView控件的简单使用

    UIPickerView控件在给用户选择某些特定的数据时经常使用到,这里演示一个简单的选择数据,显示在UITextField输入框里,把UIPickerView作为输入View,用Toolbar作为选 ...

  2. iOS学习之UIDatePicker控件使用

    iOS上的选择时间日期的控件是这样的,左边是时间和日期混合,右边是单纯的日期模式. ,   您可以选择自己需要的模式,Time, Date,Date and Time  , Count Down Ti ...

  3. iOS学习笔记——基础控件(上)

    本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...

  4. iOS学习之基础控件

    一.UILabel      1.UILabel(标签):是显示文本的空间.在App中UILabel是出现频率最高的控件.      2.UILabel是UIView的子类,作为子类一般是为了扩充父类 ...

  5. IOS 学习笔记(6) 控件 文本域(UITextField)的使用方法

    UITextField控件的诸多特性都和UITextView相似,比如成为输入文本焦点时键盘自动显示,支持长按弹出动作选项,能够接收输入事件(开始输入,修改内容,结束输入和点击回车等). 1.特有的特 ...

  6. ios 学习笔记之控件属性

    1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible;  默认是不带清除属性:Never app ...

  7. IOS 学习笔记(7) 控件 分隔栏控件(UISegmentControl)的使用方法

    分隔栏控件的系统默认式样一共有3种,分别是“普通式样”,"边框式样","条状式样" 分隔栏控件中有一个momentary属性,默认时NO.当开发者配置成YES时 ...

  8. IOS 学习笔记(5) 控件 文本视图(UITextView)的使用方法

    相对于UILabell所支持的较短文本内容,UITextView对于长文本的支持更好.UITextView能够以滚动的方式全部浏览到长文本,并且就像UILabel那样,从ISO6,他也提供了对NSAt ...

  9. IOS 学习笔记(4) 控件 标签(UILabel)的使用方法

    虽说Label的中文翻译是标签标记,但它其实是一个静态文本内容的展现控件. 一般来说,UILabel只是一个只读的文本视图,开发者可以利用UiLabel来展示内容长度有固定上限的文字内容.并且,UIL ...

随机推荐

  1. 优化 UWP 中图片的内存占用

    跟图片打交道的 UWP 应用或多或少都会遇到图片带来的性能问题,就算不主要处理图片,做个论坛做个新闻客户端都涉及到大量图片.一个帖子.一篇文章里多半都是些高清大图,这些图片一张即可占用程序 1~2M ...

  2. jQuery.1.9 live 代替事件 on 新增内容无法触发事件

    如果是新增 append 或者 html() 事件添加的内容,无法触发 click 事件, 在1.9 可以用live 事件来代替 1.9以后用 <div class="search-r ...

  3. 《DSP using MATLAB》示例Example7.12

    代码: M = 21; alpha = (M-1)/2; n = [0:1:M-1]; hd = (cos(pi*(n-alpha)))./(n-alpha); hd(alpha+1) = 0; w_ ...

  4. python之json扩展

    #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/4/9 15: ...

  5. 使用distillery 构建专业的 phoenix 项目软件包

    备注:     首先需要安装 elixir 环境   1. 基本项目说明 参考项目: https://github.com/rongfengliang/phoenix-rest-demo 2. 项目说 ...

  6. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  7. centos65安装docker遇到的问题

    1.安装docker后启动显示内核太低(升级内核): 网上太多方案 2.升级内核后还是启动不了docker:执行下面语句 yum install device-mapper-event-libs 步骤 ...

  8. 窗口点击模拟a

    [问题描述] 在计算机屏幕上,有N 个窗口.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容.当你用鼠标点击屏幕上一个点的时候,若其在窗口 ...

  9. html5 模块

    1.<header> 网站头部标签2.<nav> 导航标签3.<article> 内容标签4.<section> 文章标签5.<aside> ...

  10. xss 攻击 sql 注入

    XSS测试 "/><script>alert(document.cookie)</script><!-- <script>alert(docu ...