NSDatePicker 的子类 mouseDown 事件改变 datePicker 实例
Subclass of NSDatePicker mouseDown event changes datePicker instance
我已经在 AppDelegate -> applicationDidFinishLaunching 中实例化并初始化了 NSDatePicker 的一个子类,并覆盖了 datePicker 子类中的 mouseDown(事件:NSEvent)。当我在 datePicker 中按下鼠标按钮并中断其覆盖的 mouseDown 函数时,该实例不是我在 applicationDidFinishLaunching 中实例化的实例,因此未初始化。
我试过在不同的入口点创建实例,认为这可能是一个时机问题,但我一无所获。我没有想法,感觉有点虚弱。有帮助吗?
日期选择器:
import Cocoa
class AlarmIVDatePicker: NSDatePicker {
var viewController: ViewController!
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
return true
}
override func mouseDown(with event: NSEvent) {
let stop = 0
}
}
ViewController:
class ViewController: NSViewController, NSWindowDelegate{
var alarmIVDatePicker: AlarmIVDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
alarmIVDatePicker = AlarmIVDatePicker()
alarmIVDatePicker.viewController = self
}
我原以为我可以访问我设置的值,但实例不是我创建的,所有值都是 nil
好的。以下是您可以采取的措施来追踪这一点。将此代码添加到您的 AlarmIVDatePicker
class:
override init(frame frameRect: NSRect) {
Swift.print("AlarmIVDatePicker being called here")
super.init(frame: frameRect)
}
convenience init() {
self.init(frame: .zero)
}
required init?(coder: NSCoder) {
Swift.print("hey, you DID drop this into a storyboard or XIB file!")
super.init(coder: coder)
}
如果您在这些 init
方法中设置断点,您将捕捉到它们在何时何地被调用,而这些是您没有预料到的。
我已经在 AppDelegate -> applicationDidFinishLaunching 中实例化并初始化了 NSDatePicker 的一个子类,并覆盖了 datePicker 子类中的 mouseDown(事件:NSEvent)。当我在 datePicker 中按下鼠标按钮并中断其覆盖的 mouseDown 函数时,该实例不是我在 applicationDidFinishLaunching 中实例化的实例,因此未初始化。
我试过在不同的入口点创建实例,认为这可能是一个时机问题,但我一无所获。我没有想法,感觉有点虚弱。有帮助吗?
日期选择器:
import Cocoa
class AlarmIVDatePicker: NSDatePicker {
var viewController: ViewController!
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
return true
}
override func mouseDown(with event: NSEvent) {
let stop = 0
}
}
ViewController:
class ViewController: NSViewController, NSWindowDelegate{
var alarmIVDatePicker: AlarmIVDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
alarmIVDatePicker = AlarmIVDatePicker()
alarmIVDatePicker.viewController = self
}
我原以为我可以访问我设置的值,但实例不是我创建的,所有值都是 nil
好的。以下是您可以采取的措施来追踪这一点。将此代码添加到您的 AlarmIVDatePicker
class:
override init(frame frameRect: NSRect) {
Swift.print("AlarmIVDatePicker being called here")
super.init(frame: frameRect)
}
convenience init() {
self.init(frame: .zero)
}
required init?(coder: NSCoder) {
Swift.print("hey, you DID drop this into a storyboard or XIB file!")
super.init(coder: coder)
}
如果您在这些 init
方法中设置断点,您将捕捉到它们在何时何地被调用,而这些是您没有预料到的。