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


    接上篇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.   
    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、初始化

    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返回两个,这样就有两个齿轮了。

    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.   
    8. }  

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


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

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

  • 相关阅读:
    Vue 介绍
    Django 组件-分页器
    Django 组件content_type
    DRF 解析器组件
    Django
    Django 组件-ModelForm
    Django 组件-用户认证
    Django 组件-中间件
    Django 组件-cookie与session
    Django CBV与FBV
  • 原文地址:https://www.cnblogs.com/songfeixiang/p/3733686.html
Copyright © 2020-2023  润新知