UIPickerView的使用
来源:互联网 发布:线切割hl绘图编程软件 编辑:程序博客网 时间:2024/04/28 05:00
简述:UIPickerView是一个选择器控件,它比UIDatePicker更加通用,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完成。使用UIPickerView的对象应该遵守UIPickerViewDataSource,UIPickerViewDelegate。
一、UIPickerView控件常用的属性和方法如下:
《1》 numberOfComponents:获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。
《2》 showsSelectionIndicator:该属性控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。
《3》 - numberOfRowsInComponent::获取UIPickerView包含的列数量。
《4》 - rowSizeForComponent::获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。
《5》 - selectRow:inComponent:animated::该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。
《6》 - selectedRowInComponent::该方法返回该UIPickerView指定列中被选中的列表项。
《7》 - viewForRow:forComponent::该方法返回该UIPickerView指定列的列表项所使用的UIView控件。
UIDatePicker控件只是负责该控件的通用行为,而该控件包含多少列,各列包含多少个列表项则由UIPickerViewDataSource对象负责。开发者必须为UIPickerView设置
UIPickerViewDataSource对象,并实现如下两个方法。
《8》 - numberOfComponentsInPickerView::该UIPickerView将通过该方法来判断应该包含多少列。
《9》 - pickerView:numberOfRowsInComponent::该UIPickerView将通过该方法判断指定列应该包含多少个列表项。
《10》 - pickerView:rowHeightForComponent::该方法返回的CGFloat值将作为该UIPickerView控件中指定列中列表项的高度。
《11》 - pickerView:widthForComponent::该方法返回的CGFloat值将作为该UIPickerView控件中指定列的宽度。
《12》 - pickerView:titleForRow:forComponent::该方法返回的NSString值将作为该UIPickerView控件中指定列的列表项的文本标题。
《13》 - pickerView:viewForRow:forComponent:reusingView::该方法返回的UIView控件将直接作为该UIPickerView控件中指定列的指定列表项。
《14》- pickerView:didSelectRow:inComponent::当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该方法。
二、UIPickerView的使用方法:
1、遵守协议
@interface PickerViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
2、创建pickerView
//创建pickerView- (UIPickerView *)pickerView{ //初始化一个PickerView UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(50, 300, 300, 200)]; pickerView.tag = 1000; //指定Picker的代理 pickerView.dataSource = self; pickerView.delegate = self; //是否要显示选中的指示器(默认值是NO) pickerView.showsSelectionIndicator = NO; return pickerView;}
3、创建数据源
//创建数据源- (void)createDataSource{ //举例1 self.nameArray = @[@"周润发",@"刘德华",@"赵传",@"那英",@"汪峰",@"周杰伦"]; self.iconArray = @[@"哈哈",@"姐姐",@"刷刷刷",@"呵呵呵",@"��",@"��",@"��"]; //举例2 //得到数据源的路径 //NSString *path = [[NSBundle mainBundle] pathForResource:@"Address" ofType:@"plist"]; //根据路径得到国家所有的信息 //self.countriesDict = [[NSDictionary alloc] initWithContentsOfFile:path]; //得到所有的省份名(key值) //self.provinceArray = [self.countriesDict allKeys]; //得到省份下对应的所有的城市(value值) //self.selectedArray = [self.countriesDict objectForKey:[[self.countriesDict allKeys] objectAtIndex:0]]; //判断城市是否为空 //if (self.selectedArray.count > 0) { //得到所有的城市名(key值) //self.cityArray = [[self.selectedArray objectAtIndex:0] allKeys]; //NSLog(@"%@",self.cityArray); //} //判断城市名数组是否为空 //if (self.cityArray.count > 0) { //得到对应城市下得所有县区(value值) //self.countyArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:0]]; //}//}}
4、实现代理方法(以下代理方法内部的数据为举例,并不是一个完整地项目)
#pragma mark --- 与DataSource有关的代理方法//返回列数(必须实现)- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 2;}//返回每列里边的行数(必须实现)- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ //如果是第一列 if (component == 0) { //返回姓名数组的个数 return self.nameArray.count; } else { //返回表情数组的个数 return self.iconArray.count; }}#pragma mark --- 与处理有关的代理方法//设置组件的宽度- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{ if (component == 0) { return 100; } else { return 80; }}//设置组件中每行的高度- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{ if (component == 0) { return 60; } else { return 60; }}//设置组件中每行的标题row:行- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ if (component == 0) { return self.nameArray[row]; } else { return self.iconArray[row]; }}//- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {}//- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view{}//选中行的事件处理- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ //选择第一列执行的方法 if (component == 0) { //根据被选中的行得到省中所有的城市(value值) self.selectedArray = [self.countriesDict objectForKey:[self.provinceArray objectAtIndex:row]]; if (self.selectedArray.count > 0) {//判断得到的数组是否为空 //不为空,获得到所有的城市名(key值) self.cityArray = [[self.selectedArray objectAtIndex:0] allKeys]; } else { //为空,则城市为nil self.cityArray = nil; } //判断获得的城市名数组是否为空 if (self.cityArray.count > 0) { //不为空,取到所有的县区名(value值) self.countyArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:0]]; } else { //为空则,县区为nil self.countyArray = nil; } //刷新第一列的信息 [pickerView reloadComponent:1]; } //选择第二列执行的方法 if (component == 1) { //判断城市数组和城市名数组是否为空 if (self.selectedArray.count > 0 && self.cityArray.count > 0) { //得到所有的县区(value值) self.countyArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:row]]; } else { self.countyArray = nil; } [pickerView selectRow:1 inComponent:2 animated:YES]; } //刷新第二列的信息 [pickerView reloadComponent:2];}//btn的回调方法- (void)btnAction: (UIButton *)sender{ //获取pickerView UIPickerView *pickerView = [self.view viewWithTag:1000]; //选中的行 NSInteger result = [pickerView selectedRowInComponent:0]; //赋值 self.nameLabel.text = self.nameArray[result]; NSInteger result1 = [pickerView selectedRowInComponent:1]; self.iconLabel.text = self.iconArray[result1];}
- UIPickerView 的使用
- UIPickerView的使用
- UIPickerView 的使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView控件的使用
- UIPickerView的简单使用
- iOS UIPickerView的使用
- UIPickerView的简单使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView的使用
- UIPickerView的使用
- UIpickerView的使用
- UIPickerView的使用
- python获取文件行数
- POJ 1679 次小生成树 题解
- 緩交作業--jobmanager
- wap端图片上传
- URL,URLConnection,HttPURLConnection的使用
- UIPickerView的使用
- 下载Xcode的历史版本
- 输出一个菱形优化版
- poj1182 食物链【带权并查集】
- java打包下载
- 排列序列 (康托展开)
- VS2017+opencv2.49配置(高版本类似)||图挂了/(ㄒoㄒ)/~~
- Unsupported major.minor version 51.0解决办法
- 通过for循环每隔两秒按顺序打印出arr中的数字