iOS学习之UIPickerView控件的关联选择

来源:互联网 发布:ubuntu iso下载 编辑:程序博客网 时间:2024/04/30 04:41

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

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



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

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

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

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

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

2、初始化

[cpp] view plaincopy
  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.       
  10.     subPickerArray = [dicPicker objectForKey:@"动物"];  
  11.     textField.inputView = selectPicker;  
  12.     textField.inputAccessoryView = doneToolbar;  
  13.     textField.delegate = self;  
  14.     selectPicker.delegate = self;  
  15.     selectPicker.dataSource = self;  
  16.     selectPicker.frame = CGRectMake(0, 480, 320, 216);  
  17.   
  18. }  

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

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

[cpp] view plaincopy
  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。

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

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

[cpp] view plaincopy
  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更新。

[cpp] view plaincopy
  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上。

[cpp] view plaincopy
  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.   
  10. - (IBAction)selectButton:(id)sender {  
  11.     [textField endEditing:YES];  
  12. }  
大功告成,运行,点击TextField,弹出:


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

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

0 0