UIDatePicker的介紹
UIDatePicker這個類的對象讓用戶可以在多個車輪上選擇日期和時間。iPhone手機上的‘時鍾’應用程序中的時間與鬧鈴中便使用了該控件。使用這個控件時,如果你能配置正確,當用戶滾動車輪到一個新的日期或者時間上時,利用UIControlEventValueChanged觸發事件。UIDatePicker給出了倒計時模式,但是並沒有實現相關事件。如果你使用該模式,必須在應用程序中設置一個NSTime對象,讓倒計時中的時間不斷減少。
UIDatePicker的使用
創建並添加一個UIDatePicker對象
UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0,0,320,216)];
[self.view addSubview: datePicker];
配置UIDatePicker對象
1.日歷屬性
@property(nonatomic, copy) NSCalendar *calendar
相關說明:1.此屬性的默認值對應於用戶的當前日歷,是在‘設置’這個應用程序中去設置的。
2.訪問這個屬性相當於調用 NSCalendar類的currentCalendar方法后時返回的值。
3.設置這個屬性的值為nil,相當於使用它的默認值。
4.calendar屬性指明了用於計算時間的文化細節,它指明了一年的開始和長度,一年中如何划分的方式。
2.日期屬性
@property(nonatomic, strong) NSDate *date
相關說明:1.該屬性的默認值是UIDatePicker對象創建時的日期。
2.該屬性會在UIDatePickerModeCountDownTimer日期模式下被忽略;在該模型中,日期選擇器開始於0:00。
3.設置該屬性可以讓時間選擇器旋轉到這個設置的日期與時間,但是不會產生動畫效果。
4.如果要產生動畫效果,需要使用 setDate:animated: 方法。
3.本地化屬性
@property(nonatomic, strong) NSLocale *locale
相關說明:1.默認值是NSLocale類的currentLocale屬性返回的值,或者是是時間選擇器的日歷所使用的本地化值。
2.本地化屬性封裝了關於語言和文化的層面,如日期的格式信息方式。
3.如果設備的‘設置’應用程序中地區選擇“中國”時,NSLog(@"%@",[NSLocale currentLocale].localeIdentifier);返回的是@“zh_CN”。
4.在滿足3的前提下,設置_datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];是多余的。
4.設置時間的方法
- (void)setDate:(NSDate *)date
animated:(BOOL)animated
相關說明:該方法用來設置一個新的時間並以動畫的形式展示在時間選擇器上面。(animated值為YES時,有動畫)
5.時區屬性
@property(nonatomic, strong) NSTimeZone *timeZone
相關說明:默認值是nil,意味着它利用的是NSTimeZone類的localTimeZone(本地時區)作為當前時區,或者是利用時間選擇器的日歷所使用的時區作為當前時區。
6.時間選擇器的模式
@property(nonatomic) UIDatePickerMode datePickerMode
相關說明:1.這個屬性指明以哪一種方式展示,只有時間、只有日期、既有日期又有時間、倒計時,這四種模式中的一種。
2.默認的模式為UIDatePickerModeDateAndTime(既有日期又有時間)。
3.UIDatePickerModeTime、UIDatePickerModeDate、UIDatePickerModeDateAndTime、UIDatePickerModeCountDownTimer。
7.最大顯示時間屬性
@property(nonatomic, strong) NSDate *maximumDate
相關說明:1.該屬性值為NSDate對象,默認值是nil,nil意味着沒有最大顯示時間的約束。
2.該屬性與最小顯示時間屬性(minimumDate)結合,表示一個有效的時間范圍。
3.如果最小顯示時間大於最大顯示時間時,這兩種性質都被忽略。
4.在倒計時模式(UIDatePickerModeCountDownTimer)下,最小顯示時間和最大顯示時間這兩個屬性都會被忽略。
8.最小顯示時間屬性
@property(nonatomic, strong) NSDate *minimumDate
相關說明:1.該屬性值為NSDate對象,默認值是nil,nil意味着沒有最小顯示時間的約束。
2.該屬性與最大顯示時間屬性(maximumDate)結合,表示一個有效的時間范圍。
3.如果最小顯示時間大於最大顯示時間時,這兩種性質都被忽略。
4.在倒計時模式(UIDatePickerModeCountDownTimer)下,最小顯示時間和最大顯示時間這兩個屬性都會被忽略。
9.間隔時間屬性
@property(nonatomic) NSInteger minuteInterval
相關說明:1.使用該屬性設置由分鍾車輪顯示的時間間隔。
2.間隔值必須均勻地分隔60,如果沒有這樣做,該屬性將使用默認值為1。
3.該屬性值的范圍是大於等於1,並小於等於30。
10.倒計時秒數屬性
@property(nonatomic) NSTimeInterval countDownDuration
相關說明:1.該屬性設置倒計時需要倒計的秒數。
2.如果時間選擇器的時間模式不是倒計時模式,則該屬性會被忽略。
3.默認值是0.0,最大值為23:59(86399秒)。
獲得時間數據
主動獲取
直接通過訪問時間選擇器對象_datePicker的date屬性獲得NSDate類型的時間數據:
NSDate *theDate = _datePicker.date;//該屬性返回選中的時間
NSLog(@"%@",[theDate descriptionWithLocale:[NSLocale currentLocale]]);//返回基於本地化的時間信息,其中NSLocale的靜態方法currentLocale返回當前的NSLocale對象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//返回一個日期格式對象
dateFormatter.dateFormat = @"YYYY-MM-dd HH-mm-ss";//該屬性用於設置日期格式為YYYY-MM-dd HH-mm-ss
NSLog(@"%@",[dateFormatter stringFromDate:theDate]);//該方法用於從日期對象返回日期字符串
監聽獲取
由於日期選擇器是 UIControl的子類,因此可以可以監聽它的行為(UIControlEventValueChanged):
[ _datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
- (void)dateChanged
{
NSDate *theDate = _datePicker.date;
NSLog(@"%@",[theDate descriptionWithLocale:[NSLocale currentLocale]]);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"YYYY-MM-dd HH-mm-ss";
NSLog(@"%@",[dateFormatter stringFromDate:theDate]);
}
相關介紹
四種時間模式的介紹
1.UIDatePickerModeTime
在這種模式下,顯示時、分、AM/PM標志(可選)。具體的顯示順序取決於設備的本地化設置。
2.UIDatePickerModeDate
在這種模式下,顯示年、月、日。具體的顯示順序取決於設備的本地化設置。
3.UIDatePickerModeDateAndTime
在這種模式下,顯示日期的月、日、星期,時間的時、分、AM/PM標志(可選)。具體的顯示順序取決於設備的本地化設置。
4.UIDatePickerModeCountDownTimer
在這種模式下,顯示時、分。應用程序必須實現一個計數器(NSTimer對象),讓倒計時中的時間不斷減少。
Q&A
1、問題:在UIDatePickerModeTime模式下,如何才能不顯示“上午”/“下午”?
回答:設置本地化屬性為系統本地化,並且在手機的“設置”--“通用”--“日期與時間”--選擇“24小時制”。
_datePicker.locale = [NSLocale currentLocale];
2、
【極力推薦】中秋節兩天的良心寫作,全面講解UITextField,總有你不知道的知識:UITextField的使用、介紹、講解、全解、簡介、說明