使用 NSDatePicker 就可以調出日期選擇,結果圖如最下。
注意事項
- 建議把這個 picker 作爲全局變量,這樣就不會每次點擊按鈕都添加。
- 使用
setAction
監聽選中的值; - 不管給 picker 設置的 frame 是多大,picker 的顯示大小是固定的。
- 調出的 picker 帶有日期和鐘錶的時間,選擇日期 和 撥動鐘表盤的 時分秒 針 都會觸發
updateDateResult
方法
創建
- (void)pickTime{
NSDatePicker *datePicker = [[NSDatePicker alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];
[datePicker setDatePickerStyle:NSClockAndCalendarDatePickerStyle];
datePicker.wantsLayer = YES;
datePicker.layer.backgroundColor = [NSColor cyanColor].CGColor;
// 設置日期選擇控件的類型爲“時鐘和日曆”。其他類型有如,NSTextField文本框
[datePicker setDateValue: [NSDate date]]; // 初始化選中當前日期
[datePicker setTarget:self];
[datePicker setAction:@selector(updateDateResult:)]; // 綁定每次選擇日期觸發的action
[self.view addSubview:datePicker];
}
- (void)updateDateResult:(NSDatePicker *)datePicker{
// 拿到當前選擇的日期
NSDate *theDate = [datePicker dateValue];
NSLog(@"日期:%@",theDate);
if (theDate) {
// 把選擇的日期格式化成想要的形式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *dateString = [formatter stringFromDate:theDate];
NSLog(@"日期:%@",dateString);
}
}
枚舉
NSDatePickerStyle
typedef NS_ENUM(NSUInteger, NSDatePickerStyle) {
NSTextFieldAndStepperDatePickerStyle = 0,
NSClockAndCalendarDatePickerStyle = 1,
NSTextFieldDatePickerStyle = 2
};
NSDatePickerElementFlags
typedef NS_OPTIONS(NSUInteger, NSDatePickerElementFlags) {
/* Time Elements */
NSHourMinuteDatePickerElementFlag = 0x000c,
NSHourMinuteSecondDatePickerElementFlag = 0x000e,
NSTimeZoneDatePickerElementFlag = 0x0010,
/* Date Elements */
NSYearMonthDatePickerElementFlag = 0x00c0,
NSYearMonthDayDatePickerElementFlag = 0x00e0,
NSEraDatePickerElementFlag = 0x0100,
};
效果圖
參考資料
悲觀患者的《mac開發系列28:日期選擇功能實現》http://www.jianshu.com/p/6886ed384cc4