天天看點

UIDatePicker | 時間選擇器

一:UIDatePicker的介紹

UIDatePicker 是一個控制器類,封裝了 UIPickerView,但是他是UIControl的子類,專門用于接受日期、時間和持續時長的輸入。

日期選取器的各列會按照指定的風格進行自動配置,這樣就讓開發者不必關心如何配置表盤這樣的底層操作。

你也可以對其進行定制,令其使用任何範圍的日期。

UIDatePicker這個類的對象讓使用者可以在多個車輪上選擇日期和時間。

iPhone手機上的‘時鐘’應用程式中的時間與鬧鈴中便使用了該控件。

使用這個控件時,如果你能配置正确,當使用者滾動車輪到一個新的日期或者時間上時,利用UIControlEventValueChanged觸發事件。

UIDatePicker給出了倒計時模式,但是并沒有實作相關事件。

如果你使用該模式,必須在應用程式中設定一個NSTime對象,讓倒計時中的時間不斷減少。

二:UIDatePicker的使用

2.1 建立并添加一個UIDatePicker對象

//
//  ViewController.m
//  DatePicker
//

#import "ViewController.h"

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

//建立對象
@property (nonatomic, strong) UIDatePicker *datePicker;

@end      

2.2 配置UIDatePicker對象

- (void)setupDateKeyPan {

    UIDatePicker *datePicker = [[UIDatePicker alloc] init];

    //設定地區: zh-中國
    datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];

    //設定日期模式(Displays month, day, and year depending on the locale setting)
    datePicker.datePickerMode = UIDatePickerModeCountDownTimer;
    // 設定目前顯示時間
    [datePicker setDate:[NSDate date] animated:YES];
    // 設定顯示最大時間(此處為目前時間)
    [datePicker setMaximumDate:[NSDate date]];

    //設定時間格式

    //監聽DataPicker的滾動
    [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];

    self.datePicker = datePicker;

    //設定時間輸入框的鍵盤框樣式為時間選擇器
    self.timeTextField.inputView = datePicker;
}      

2.3 禁止使用者輸入文字

//禁止使用者輸入文字
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  return NO;
}      

2.4 顯示文本

- (void)dateChange:(UIDatePicker *)datePicker {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    //設定時間格式
    formatter.dateFormat = @"yyyy年 MM月 dd日";
    NSString *dateStr = [formatter  stringFromDate:datePicker.date];

    self.timeTextField.text = dateStr;
}
@end      

三:選擇模式

日期/時間選取器持4種不同模式的選擇方式。

通過設定 datePickerMode 屬性,可以定義選擇模式:

datePicker.datePickerMode = UIDatePickerModeTime;      

支援的模式:

UIDatePicker | 時間選擇器

四種時間模式樣式截圖如下:

3.1 UIDatePickerModeTime

UIDatePicker | 時間選擇器

在這種模式下,顯示時、分、AM/PM标志(可選)。具體的顯示順序取決于裝置的本地化設定。

3.2 UIDatePickerModeDate

UIDatePicker | 時間選擇器

在這種模式下,顯示年、月、日。具體的顯示順序取決于裝置的本地化設定。

3.3 UIDatePickerModeDateAndTime

UIDatePicker | 時間選擇器

在這種模式下,顯示日期的月、日、星期,時間的時、分、AM/PM标志(可選)。具體的顯示順序取決于裝置的本地化設定。

3.4 UIDatePickerModeCountDownTimer

UIDatePicker | 時間選擇器

在這種模式下,顯示時、分。應用程式必須實作一個計數器(NSTimer對象),讓倒計時中的時間不斷減少。

四:日期範圍

你可以通過設定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;      

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

datePicker.date = minDate;      

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

[datePicker setDate:maxDate animated:YES];      

4. 本篇文章demo源碼:

源碼Demo擷取方法

關注 【網羅開發】微信公衆号,回複【88】便可領取。

網羅天下方法,友善你我開發,更多iOS技術幹貨等待領取,所有文檔會持續更新,歡迎關注一起成長!