OS X开发.第一章,1.13 NSDatePicker

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值