from: http://blog.csdn.net/iukey/article/details/7327164
选取器被用来取代PC上面的下拉菜单,它是一个大大的滚轮,它占用固定的大小 320×216.
一、创建
大小虽然固定,但是位置可以任意(不过横向被充满,咱也只能改变纵向位置)。与UItableView 类似,UIpickerView 类也需要一个数据源。与表格视图不同的是,选取器不使用索引路径,而是用一个NSinteger 值来标识每一行。选取器可以有多个表盘,每个都可以,作为一个组件引用。
选取器视图使用代理作为数据源,因此数据源可以存在于另一个类或者视图控制器中。
- UIPickerView* pickerView = [ [ UIpickerView alloc] initWithFrame:CGRectmake(0.0,100.0,0.0,0.0)];
- pickerView.delegate = self;
- pickerView.dataSource = self;
恶心的苹果把许多属性保留为私有的,开放给开发者的少的可怜,可怜到唯一可用的外观选项就是选择窗口。
将选取器的 showsSelectionIndicator 属性设置为YES,可以在当前选择上显示一个透明窗口:
- pickerView.showsSelectionIndicator = YES;
创建好界面就要考虑数据源了。比必须实现下列数据源委托方法,这些方法是 UIPickerViewDataSource 协议的必要方法。
numberOfComponentsInPickerView
滚轮数量
numberOfRowsInComponent
为选取器中每个滚轮设置不同数目的行。这个方法返回指定滚轮的行数。
除此之外,UIPickerViewDelegate 协议还实现了下列方法,来获取选取器组件特定的信息。
titleForRow
返回对应滚轮(组件)的给定行的实际表盘取值。会以 NSString 对象返回这些值。
viewForRow
这个方法可以重写选取器显示组件表盘默认行为,令任何 UIView 类都可以在其中显示。
widthForComponet
返回给定组件(滚轮)的宽度。如果这方法未实现,选取器会自动调整到合适的宽度。
rowHeightComponent
返回给定组件(滚轮)的高度。如果这个方法未实现,选取器会自动调整到合适的高度。
四、显示
[ self.view addSubview:pickerView ];
五、读取选取器
使用视图的selectedRowInComponent 方法,是获得选取器视图被选中列的索引的最直接的方法:
- int selectedRow = [ pickerView selectedRowInComponent:0 ];
- - (void)pickerView:(UIPickerView*)pickerView didSelectedRow:(NSInteger)row inComponent:(NSInteger)component{
- /*添加代码,根据选中行尽享相应操作*/
- }
UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期、时间和持续时长的输入。日期选取器的各列会按照指定的风格进行自动配置,这样就让开发者不必关心如何配置表盘这样的底层操作。你也可以对其进行定制,令其使用任何范围的日期。
UIDatePicker 依赖于 NSDate 类,这个类是cocoa 基础的一员,以前用于桌面系统。本文中仅需用到 initWithString 来创建NSDate 所以NSDate 留待专题讲解,你只需要掌握本文中使用的方法就好。
- NSDate* _date = [ [ NSDate alloc] initWithString:@"2012-03-07 00:35:00 -0500"];
UIDatePicker 使用起来比标准 UIPickerView 更简单。他会根据你指定的日期范围创建自己的数据源。使用它只需要创建一个对象:
- UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0.0,0.0,0.0,0.0)];
二、日期选取器模式
日期/时间选取器支持4种不同模式的选择方式。通过设置 datePickerMode 属性,可以定义选择模式:
- datePicker.datePickerMode = UIDatePickerModeTime;
支持的模式:
- typedef enum {
- UIDatePickerModeTime, // Displays hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. 6 | 53 | PM)
- UIDatePickerModeDate, // Displays month, day, and year depending on the locale setting (e.g. November | 15 | 2007)
- UIDatePickerModeDateAndTime, // Displays date, hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. Wed Nov 15 | 6 | 53 | PM)
- UIDatePickerModeCountDownTimer // Displays hour and minute (e.g. 1 | 53)
- } UIDatePickerMode;
你可以将分钟表盘设置为以不同的时间间隔来显示分钟,前提是该间隔要能够让60整除。默认间隔是一分钟。如果要使用不同的间隔,需要改变 minuteInterval属性:
- datePicker.minuteInterval = 5;
你可以通过设置mininumDate 和 maxinumDate 属性,来指定使用的日期范围。如果用户试图滚动到超出这一范围的日期,表盘会回滚到最近的有效日期。两个方法都需要NSDate 对象作参数:
- NSDate* minDate = [[NSDate alloc]initWithString:@"1900-01-01 00:00:00 -0500"];
- NSDate* maxDate = [[NSDate alloc]initWithString:@"2099-01-01 00:00:00 -0500"];
- datePicker.minimumDate = minDate;
- datePicker.maximumDate = maxDate;
- datePicker.date = minDate;
- [ datePicker setDate:maxDate animated:YES];
- [ self.view addSubview:datePicker];
六、读取日期
- NSDate* _date = datePicker.date;
- [ datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged ];
- -(void)dateChanged:(id)sender{
- UIDatepicker* control = (UIDatePicker*)sender;
- NSDate* _date = control.date;
- /*添加你自己响应代码*/
- }