0

我有一个类似的代码:

let datePicker = NSDatePicker(....)
self.addSubview(datePicker)
self.window?.makeFirstResponder(datePicker)

何时makeFirstResponder调用第一个元素获得编辑焦点。对于美国地区,这会选择月份中的某一天,因为日期格式是 DD-MM-YYYY。对于日期格式为 YYYY-MM-DD 的其他地区,YYYY 成为编辑焦点。NSDatePicker无论日期格式是什么,如何强制开始编辑月份中的某一天?

4

1 回答 1

0

您可以使用 DateFormatter 方法func dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String?检查当前的语言环境 dateFormat,检查当天的位置并发送 Tab 键 0、1 或 2 次:

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var datePicker: NSDatePicker!

    override func viewWillAppear() {
        super.viewWillAppear()
        datePicker.locale = .init(identifier: "en_US")
        datePicker.dateValue = Date()
        if view.window?.makeFirstResponder(datePicker) == true {
            selectDayElement(from: datePicker)
        }
    }

    func selectDayElement(from datePicker: NSDatePicker) {
        if let firstIndex = DateFormatter
            .dateFormat(fromTemplate: "yyyyMMdd",
                        options: 0,
                        locale: datePicker.locale)?
            .components(separatedBy: .punctuationCharacters)
            .firstIndex(of: "dd") {
            (0..<firstIndex).forEach { _ in
                datePicker.keyDown(with: NSEvent(cgEvent: CGEvent(keyboardEventSource: nil, virtualKey: 48, keyDown: true)!)!)
            }
        }
    }

}

在此处输入图像描述

于 2020-05-11T16:39:47.797 回答