1. 程式人生 > >iOS開發-UI控制元件:UIDatePicker日期/時間選取器(滾輪)

iOS開發-UI控制元件:UIDatePicker日期/時間選取器(滾輪)

文章轉自: http://justcoding.iteye.com/blog/1473352

UIDatePicker 是一個控制器類,封裝了 UIPickerView,但是他是UIControl的子類,專門用於接受日期、時間和持續時長的輸入。日期選取器的各列會按照指定的風格進行自動配置,這樣就讓開發者不必關心如何配置錶盤這樣的底層操作。你也可以對其進行定製,令其使用任何範圍的日期。

UIDatePicker 依賴於 NSDate 類,這個類是cocoa 基礎的一員,以前用於桌面系統。本文中僅需用到 initWithString 來建立NSDate 所以NSDate 留待專題講解,你只需要掌握本文中使用的方法就好。

C程式碼  收藏程式碼
  1. NSDate* _date = [ [ NSDate alloc] initWithString:@"2012-03-07 00:35:00 -0500"];    

一、建立日期/時間選取器

UIDatePicker 使用起來比標準 UIPickerView 更簡單。他會根據你指定的日期範圍建立自己的資料來源。使用它只需要建立一個物件:

C程式碼  收藏程式碼
  1. UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0.0,0.0,0.0,0.0)];  

預設情況下選取會顯示目前的日期和時間,並提供幾個錶盤,分別顯示可以選擇的月份和日期、小時、分鐘、以及上午、下午。因此使用者預設可以選擇任何日期和時間的組合。

二、日期選取器模式

日期/時間選取器支援4種不同模式的選擇方式。通過設定 datePickerMode 屬性,可以定義選擇模式:

C程式碼  收藏程式碼
  1. datePicker.datePickerMode = UIDatePickerModeTime;   

支援的模式:

C程式碼  收藏程式碼
  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屬性:

C程式碼  收藏程式碼
  1. datePicker.minuteInterval = 5;    

四、日期範圍

你可以通過設定mininumDate 和 maxinumDate 屬性,來指定使用的日期範圍。如果使用者試圖滾動到超出這一範圍的日期,錶盤會回滾到最近的有效日期。兩個方法都需要NSDate 物件作引數:

C程式碼  收藏程式碼
  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. datePicker.minimumDate = minDate;    
  4. datePicker.maximumDate = maxDate;   

如果兩個日期範圍屬性中任何一個未被設定,則預設行為將會允許使用者選擇過去或未來的任意日期。這在某些情況下很有用處,比如,當選擇生日時,可以是過去的任意日期,但終止與當前日期。如果你希望設定預設顯示的日期,可以使用date屬性:

C程式碼  收藏程式碼
  1. datePicker.date = minDate;    

此外,你還可以用 setDate 方法。如果選擇了使用動畫,則錶盤會滾動到你指定的日期:

C程式碼  收藏程式碼
  1. [datePicker setDate:maxDate animated:YES];  

五、顯示日期選擇器

C程式碼  收藏程式碼
  1. [self.view addSubview:datePicker];  

需要注意的是,選取器的高度始終是216畫素,要確定分配了足夠的空間來容納。

六、讀取日期

C程式碼  收藏程式碼
  1. NSDate* _date = datePicker.date;   

由於日期選擇器是 UIControl的子類 (與UIPickerView不同),你還可以在UIControl類的通知結構中掛接一個委託:

C程式碼  收藏程式碼
  1. [datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged ];  

只要使用者選擇了一個新日期,你的動作類就會被呼叫:

C程式碼  收藏程式碼
  1. -(void)dateChanged:(id)sender{    
  2.           UIDatepicker* control = (UIDatePicker*)sender;    
  3. NSDate* _date = control.date;    
  4. /*新增你自己響應程式碼*/    
  5. }    

是不是覺得很好玩呢?確實。如果覺得好玩,你也試著封裝一個UIPickerView 試試看,打造一個你自己的專用滾輪。