UIDatePicker 日期/时间选取器(滚轮)

from: http://blog.csdn.net/iukey/article/details/7327164


选取器被用来取代PC上面的下拉菜单,它是一个大大的滚轮,它占用固定的大小 320×216.

一、创建

大小虽然固定,但是位置可以任意(不过横向被充满,咱也只能改变纵向位置)。与UItableView 类似,UIpickerView 类也需要一个数据源。与表格视图不同的是,选取器不使用索引路径,而是用一个NSinteger 值来标识每一行。选取器可以有多个表盘,每个都可以,作为一个组件引用。

选取器视图使用代理作为数据源,因此数据源可以存在于另一个类或者视图控制器中。

[java]  view plain copy print ?
  1. UIPickerView* pickerView = [ [ UIpickerView alloc] initWithFrame:CGRectmake(0.0,100.0,0.0,0.0)];  
  2. pickerView.delegate = self;  
  3. pickerView.dataSource =  self;  
二、属性

恶心的苹果把许多属性保留为私有的,开放给开发者的少的可怜,可怜到唯一可用的外观选项就是选择窗口。

将选取器的 showsSelectionIndicator 属性设置为YES,可以在当前选择上显示一个透明窗口:

[java]  view plain copy print ?
  1. pickerView.showsSelectionIndicator = YES;  
三、数据源

创建好界面就要考虑数据源了。比必须实现下列数据源委托方法,这些方法是 UIPickerViewDataSource 协议的必要方法。

numberOfComponentsInPickerView  

滚轮数量

numberOfRowsInComponent   

为选取器中每个滚轮设置不同数目的行。这个方法返回指定滚轮的行数。

除此之外,UIPickerViewDelegate 协议还实现了下列方法,来获取选取器组件特定的信息。

titleForRow 

 返回对应滚轮(组件)的给定行的实际表盘取值。会以 NSString 对象返回这些值。

viewForRow

这个方法可以重写选取器显示组件表盘默认行为,令任何 UIView 类都可以在其中显示。

widthForComponet

返回给定组件(滚轮)的宽度。如果这方法未实现,选取器会自动调整到合适的宽度。

rowHeightComponent

返回给定组件(滚轮)的高度。如果这个方法未实现,选取器会自动调整到合适的高度。
四、显示

[ self.view addSubview:pickerView ];

五、读取选取器

使用视图的selectedRowInComponent 方法,是获得选取器视图被选中列的索引的最直接的方法:

[java]  view plain copy print ?
  1. int selectedRow = [ pickerView  selectedRowInComponent:0 ];  
也有一个委托方法,当用户选择了选取器中一行时,会收到通知。用这个方法可以向对象发出警报,这样它就可以对新行做出反应:
[java]  view plain copy print ?
  1. - (void)pickerView:(UIPickerView*)pickerView didSelectedRow:(NSInteger)row inComponent:(NSInteger)component{  
  2. /*添加代码,根据选中行尽享相应操作*/  
  3. }  

UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期、时间和持续时长的输入。日期选取器的各列会按照指定的风格进行自动配置,这样就让开发者不必关心如何配置表盘这样的底层操作。你也可以对其进行定制,令其使用任何范围的日期。

UIDatePicker 依赖于 NSDate 类,这个类是cocoa 基础的一员,以前用于桌面系统。本文中仅需用到 initWithString 来创建NSDate 所以NSDate 留待专题讲解,你只需要掌握本文中使用的方法就好。

[java]  view plain copy print ?
  1. NSDate* _date = [ [ NSDate alloc] initWithString:@"2012-03-07 00:35:00 -0500"];  
一、创建日期/时间选取器

UIDatePicker 使用起来比标准 UIPickerView 更简单。他会根据你指定的日期范围创建自己的数据源。使用它只需要创建一个对象:

[java]  view plain copy print ?
  1. UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0.0,0.0,0.0,0.0)];  
默认情况下选取会显示目前的日期和时间,并提供几个表盘,分别显示可以选择的月份和日期、小时、分钟、以及上午、下午。因此用户默认可以选择任何日期和时间的组合。

二、日期选取器模式

日期/时间选取器支持4种不同模式的选择方式。通过设置 datePickerMode 属性,可以定义选择模式:

[java]  view plain copy print ?
  1. datePicker.datePickerMode = UIDatePickerModeTime;  

支持的模式:

[java]  view plain copy print ?
  1. typedef enum {  
  2.     UIDatePickerModeTime,           // Displays hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. 6 | 53 | PM)  
  3.     UIDatePickerModeDate,           // Displays month, day, and year depending on the locale setting (e.g. November | 15 | 2007)  
  4.     UIDatePickerModeDateAndTime,    // Displays date, hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. Wed Nov 15 | 6 | 53 | PM)  
  5.     UIDatePickerModeCountDownTimer  // Displays hour and minute (e.g. 1 | 53)  
  6. } UIDatePickerMode;  
三、时间间隔

你可以将分钟表盘设置为以不同的时间间隔来显示分钟,前提是该间隔要能够让60整除。默认间隔是一分钟。如果要使用不同的间隔,需要改变 minuteInterval属性:

[java]  view plain copy print ?
  1. datePicker.minuteInterval = 5;  
四、日期范围

你可以通过设置mininumDate 和 maxinumDate 属性,来指定使用的日期范围。如果用户试图滚动到超出这一范围的日期,表盘会回滚到最近的有效日期。两个方法都需要NSDate 对象作参数:

[java]  view plain copy print ?
  1. NSDate* minDate = [[NSDate alloc]initWithString:@"1900-01-01 00:00:00 -0500"];  
  2.     NSDate* maxDate = [[NSDate alloc]initWithString:@"2099-01-01 00:00:00 -0500"];  
  3.       
  4.     datePicker.minimumDate = minDate;  
  5.     datePicker.maximumDate = maxDate;  
如果两个日期范围属性中任何一个未被设置,则默认行为将会允许用户选择过去或未来的任意日期。这在某些情况下很有用处,比如,当选择生日时,可以是过去的任意日期,但终止与当前日期。如果你希望设置默认显示的日期,可以使用date属性:
[java]  view plain copy print ?
  1. datePicker.date = minDate;  
此外,你还可以用 setDate 方法。如果选择了使用动画,则表盘会滚动到你指定的日期:
[java]  view plain copy print ?
  1. [ datePicker setDate:maxDate animated:YES];  
五、显示日期选择器

[java]  view plain copy print ?
  1. [ self.view addSubview:datePicker];  
需要注意的是,选取器的高度始终是216像素,要确定分配了足够的空间来容纳。

六、读取日期

[java]  view plain copy print ?
  1. NSDate* _date = datePicker.date;  
由于日期选择器是 UIControl的子类 (与UIPickerView不同),你还可以在UIControl类的通知结构中挂接一个委托:
[java]  view plain copy print ?
  1. [ datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged ];  
只要用户选择了一个新日期,你的动作类就会被调用:
[java]  view plain copy print ?
  1. -(void)dateChanged:(id)sender{  
  2.           UIDatepicker* control = (UIDatePicker*)sender;  
  3. NSDate* _date = control.date;  
  4. /*添加你自己响应代码*/  
  5. }  
是不是觉得很好玩呢?确实。如果觉得好玩,你也试着封装一个UIPickerView 试试看,打造一个你自己的专用滚轮。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值