NSDatePicker专注于每月的某天编辑 [英] NSDatePicker focus on day of the month editing
问题描述
我有类似的代码:
let datePicker = NSDatePicker(....)
self.addSubview(datePicker)
self.window?.makeFirstResponder(datePicker)
调用makeFirstResponder
时,第一个元素将成为编辑焦点.对于美国地区,此日期为每月的某天,因为日期格式为DD-MM-YYYY.对于日期格式为YYYY-MM-DD的其他区域,YYYY将成为编辑焦点.不管日期格式是什么,如何强制NSDatePicker
开始每月的某天?
When makeFirstResponder
is called first element gets editing focus. For U.S region this picks day of the month, because date format is DD-MM-YYYY. For other regions when date format is YYYY-MM-DD, YYYY gets editing focus. How can I force NSDatePicker
to start editing day of the month no matter what date format is?
推荐答案
您可以使用DateFormatter方法func dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String?
来检查当前的语言环境dateFormat,检查一天的位置,然后将Tab键发送0、1或2次:
You can use DateFormatter method func dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String?
to check the current locale dateFormat, check the location of the day and send the tab key 0, 1 or 2 times:
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)!)!)
}
}
}
}
这篇关于NSDatePicker专注于每月的某天编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!