配色: 字号:
详解iOS开发中UIPickerView控件的使用方法
2016-11-08 | 阅:  转:  |  分享 
  
详解iOS开发中UIPickerView控件的使用方法

这篇文章主要介绍了详解iOS开发中UIPickerView控件的使用方法,代码基于传统的Objective-C,需要的朋友可以参考下

UIPickerView控件在给用户选择某些特定的数据时经常使用到,这里演示一个简单的选择数据,显示在UITextField输入框里,把UIPickerView作为输入View,用Toolbar作为选定数据的按钮。和其他UITableView控件相似,UIPickerView也需要数据源。我们要实现的效果如下:





下面开始使用的步骤。1、打开XCode4.3.2,新建一个SingleViewApplication,命名为PickerViewDemo,CompanyIdentifier为:com.www.hunanwang.net.rongfzh.yc2、拖放控件2.1、拖放一个UIPickerView,放置在View的最下方2.2、拖放一个Toolbar控件,放置在View的外面,让它不属于View的子控件,并把item命名为“完成”,效果如下:





2.3放置一个FlexibleSpaceBarButtonItem撑开



2.4放一个UITextField,用来显示选择的数据



3、创建映射在ViewController.xib文件里按alt+command+www.visa158.com+enter键,打开AssistantEditor,按住Control键,选择各个控件,拖拽到ViewController.h文件里,生成以下变量代码

复制代码代码如下:

#import

@interfaceViewController:UIViewController{NSArraypickerArray;}-(IBAction)selectButton:(id)sender;@property(strong,nonatomic)IBOutletUIToolbardoneToolbar;

@property(strong,nonatomic)IBOutletUIPickerViewselectPicker;@property(strong,nonatomic)IBOutletUITextFieldtextField;@end





4、实现数据源和协议ViewController.h文件里实现

复制代码代码如下:

#import

@interfaceViewController:UIViewController{NSArraypickerArray;}-(IBAction)selectButton:(id)sender;@property(strong,nonatomic)IBOutletUIToolbardoneToolbar;

@property(strong,nonatomic)IBOutletUIPickerViewselectPicker;@property(strong,nonatomic)IBOutletUITextFieldtextField;@end

ViewController.m文件

复制代码代码如下:

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView)pickerView{return1;}-(NSInteger)pickerView:(UIPickerView)pickerViewnumberOfRowsInComponent:(NSInteger)component{return[pickerArraycount];}-(NSString)pickerView:(UIPickerView)pickerViewtitleForRow:(NSInteger)rowforComponent:(NSInteger)component{return[pickerArrayobjectAtIndex:row];}

-(void)textFieldDidEndEditing:(UITextField)textField{NSIntegerrow=[selectPickerselectedRowInComponent:0];self.textField.text=[pickerArrayobjectAtIndex:row];}

上面numberOfComponentsInPickerView返回有几个PickerView,textFieldDidEndEditing这个在textField结束编辑时,显示PickerView选择中的数据。

Toolbar的item的完成按钮

复制代码代码如下:

-(IBAction)selectButton:(id)sender{[textFieldendEditing:YES];}

5、初始化

复制代码代码如下:

-(void)viewDidLoad{[superviewDidLoad];pickerArray=[NSArrayarrayWithObjects:@"动物",@"植物",@"石头",@"天空",nil];textField.inputView=selectPicker;textField.inputAccessoryView=doneToolbar;textField.delegate=self;selectPicker.delegate=self;selectPicker.dataSource=self;selectPicker.frame=CGRectMake(0,480,320,216);

}

代码解释:设置委托textField.delegate=self;selectPicker.delegate=self;selectPicker.dataSource=self;

隐藏UIPickerView

复制代码代码如下:

selectPicker.frame=CGRectMake(0,480,320,216);

运行:



UIPickerView控件的关联选择



当选择左边的一级选项时,左边展示一级选项里含有的二级选项,选择后显示在TextField里。如何实现呢?建立一个和左边的列表key对应的数组,当选择这个key时,刷新左边UIPickerView部分的内容显示对应数组的数据,选择时,找到两个UIPickerView部件rowIndex,找出数据,放到TextField里。1、打开上篇PickerViewDemo项目,在ViewController.h添加两个成员变量:NSArraysubPickerArray;NSDictionarydicPicker;

复制代码代码如下:

#import

@interfaceViewController:UIViewController{NSArraypickerArray;NSArraysubPickerArray;NSDictionarydicPicker;}-(IBAction)selectButton:(id)sender;@property(strong,nonatomic)IBOutletUIToolbardoneToolbar;@property(strong,nonatomic)IBOutletUIPickerViewselectPicker;@property(strong,nonatomic)IBOutletUITextFieldtextField;@end

2、初始化

复制代码代码如下:

-(void)viewDidLoad{[superviewDidLoad];pickerArray=[NSArrayarrayWithObjects:@"动物",@"植物",@"石头",nil];dicPicker=[NSDictionarydictionaryWithObjectsAndKeys:[NSArrayarrayWithObjects:@"鱼",@"鸟",@"虫子",nil],@"动物",[NSArrayarrayWithObjects:@"花",@"草",@"葵花",nil],@"植物",[NSArrayarrayWithObjects:@"疯狂的石头",@"花岗岩",@"鹅卵石",nil],@"石头",nil];subPickerArray=[dicPickerobjectForKey:@"动物"];textField.inputView=selectPicker;textField.inputAccessoryView=doneToolbar;textField.delegate=self;selectPicker.delegate=self;selectPicker.dataSource=self;selectPicker.frame=CGRectMake(0,480,320,216);

}

给NSDictionarydicPicker;赋值,对应的三个关键字添加了对应的数组。3、Component返回两个,这样就有两个齿轮了。

复制代码代码如下:

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView)pickerView{return2;}

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

复制代码代码如下:

#import"ViewController.h"#definekFirstComponent0#definekSubComponent1

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

复制代码代码如下:

-(NSInteger)pickerView:(UIPickerView)pickerViewnumberOfRowsInComponent:(NSInteger)component{if(component==kFirstComponent){return[pickerArraycount];}else{return[subPickerArraycount];}

}

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

复制代码代码如下:

-(NSString)pickerView:(UIPickerView)pickerViewtitleForRow:(NSInteger)rowforComponent:(NSInteger)component{if(component==kFirstComponent){return[pickerArrayobjectAtIndex:row];}else{return[subPickerArrayobjectAtIndex:row];}}

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

复制代码代码如下:

-(void)pickerView:(UIPickerView)pickerViewdidSelectRow:(NSInteger)rowinComponent:(NSInteger)component{if(component==kFirstComponent){subPickerArray=[dicPickerobjectForKey:[pickerArrayobjectAtIndex:row]];[pickerViewselectRow:0inComponent:kSubComponentanimated:YES];[pickerViewreloadComponent:kSubComponent];}}

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

复制代码代码如下:

-(void)textFieldDidEndEditing:(UITextField)textField{NSIntegerfirstViewRow=[selectPickerselectedRowInComponent:kFirstComponent];NSIntegersubViewRow=[selectPickerselectedRowInComponent:kSubComponent];NSStringfirstString=[pickerArrayobjectAtIndex:firstViewRow];NSStringsubString=[[dicPickerobjectForKey:[pickerArrayobjectAtIndex:firstViewRow]]objectAtIndex:subViewRow];NSStringtextString=[[NSStringalloc]initWithFormat:@"您选择了:%@%@%@",firstString,@"里的",subString];self.textField.text=textString;}

-(IBAction)selectButton:(id)sender{[textFieldendEditing:YES];}

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

























献花(0)
+1
(本文系白狐一梦首藏)