1.13 NSDatePicker
NSDatePicker是Cocoa中提供的日历选择控件,其提供了较为实用的外观样式与回调事件,也可以对日期进行业务级别的校验。
1.13.1 基本声明
import Cocoa
class WidgetController: NSViewController, NSComboBoxDelegate, NSComboBoxDataSource, NSDatePickerCellDelegate {
var mView: NSView!
var datePicker: NSDatePicker!
override func loadView() {
self.view = NSView(frame: NSRect(x: 0, y: 0, width: 500, height: 300))
}
private func initView(){
mView = NSView(frame: NSRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
datePicker = NSDatePicker(frame: CGRect(x: (self.view.frame.width / 2) - 150, y: (self.view.frame.height / 2), width: 300, height: 160))
datePicker.datePickerStyle = .textFieldAndStepper
let date = NSDateComponents()
date.day = 19
date.month = 10
date.year = 2021
date.hour = 19
date.minute = 30
let calendar = NSCalendar.current
let newDate = calendar.date(from: date as DateComponents)
// 利用上述配置的date作为当前日期
datePicker.dateValue = newDate!
datePicker.delegate = self
datePicker.target = self
datePicker.action = #selector(datePickerListener)
self.view.addSubview(datePicker)
}
private func initConfig(){
self.title = "NSWidget-Family"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
initView()
initConfig()
}
@objc func datePickerListener(){
print("------> dateValue : \(datePicker.dateValue)")
print("------> stringValue : \(datePicker.stringValue)")
print("------> timeInterval : \(datePicker.timeInterval)")
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let dateString = formatter.string(from: datePicker.dateValue)
print("------> Transfer date: \(dateString)")
}
func datePickerCell(_ datePickerCell: NSDatePickerCell, validateProposedDateValue proposedDateValue: AutoreleasingUnsafeMutablePointer<NSDate>, timeInterval proposedTimeInterval: UnsafeMutablePointer<TimeInterval>?) {
print("------> datePickerCell.proposedDateValue:\(proposedDateValue)")
}
}
1.13.2 方法或属性
1.外观样式
样式分为三种,分别为日历和时钟类型(clockAndCalendar),文本框类型(textFieldAndStepper),文本框与步进器类型(textField)。
2.日期限制
.maxDate :最大日期
.minDate :最小日期
3.鼠标点击模式
鼠标点击模式分为获取点击日期与获取所选日期范围。datePickerMode属性为single为获取点击日期,为range则是范围。
运行图:
图1 - ClockAndCalendar样式
图2 - TextFieldAndStepper
图3 - TextField样式
控制台输出:
------> datePickerCell.proposedDateValue:0x00007ffeefbfb660
------> dateValue : 2021-10-15 11:30:00 +0000
------> stringValue : Friday, October 15, 2021 at 19:30:00 China Standard Time
------> timeInterval : 0.0
------> Transfer date: 2021-10-15
------> dateValue : 2021-10-15 11:30:00 +0000
------> stringValue : Friday, October 15, 2021 at 19:30:00 China Standard Time
------> timeInterval : 0.0
------> Transfer date: 2021-10-15