Swift NSDatePicker mouseDown事件的子类更改datePicker实例

Swift NSDatePicker mouseDown事件的子类更改datePicker实例,swift,instance,mousedown,nsdatepicker,Swift,Instance,Mousedown,Nsdatepicker,我在AppDelegate->ApplicationIDFinishLaunching中实例化并初始化了NSDatePicker的一个子类,并在datePicker子类中重写了mouseDown(带有事件:NSEvent)。当我在datePicker中按下鼠标按钮并在其重写的mouseDown函数中中断时,该实例不是我在ApplicationIDFinishLaunching中实例化的实例,因此未初始化 我曾尝试在不同的入口点创建实例,认为这可能是一个时间问题,但我一无所获。我没有主意了,感觉有

我在AppDelegate->ApplicationIDFinishLaunching中实例化并初始化了NSDatePicker的一个子类,并在datePicker子类中重写了mouseDown(带有事件:NSEvent)。当我在datePicker中按下鼠标按钮并在其重写的mouseDown函数中中断时,该实例不是我在ApplicationIDFinishLaunching中实例化的实例,因此未初始化

我曾尝试在不同的入口点创建实例,认为这可能是一个时间问题,但我一无所获。我没有主意了,感觉有点虚弱。有什么帮助吗

日期选择器:

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


}

我希望我可以访问我设置的值,但该实例不是我创建的实例,所有值都为零。下面是你能做的来追踪这个。将此代码添加到
AlarmIVDatePicker
类:

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中实例化日期选择器很奇怪。为什么不在实际使用它的任何视图或窗口控制器的
viewDidLoad
视图中实例化它呢?另外,您是否使用故事板或xib文件,是否为该日期选择器使用
IBOutlet
,或者如何在视图中引用该日期选择器?为什么在AppDelegate中我没有很好的答案,但同意,因此现在在viewDidLoad中实例化它:override func viewDidLoad(){super.viewDidLoad()alarmIVDatePicker=alarmIVDatePicker()alarmIVDatePicker.viewController=self}并使用IBOutlet引用它:@IBOutlet var alarmIVDatePicker:alarmIVDatePicker!mouseDown之后的实例不同,它的viewController为nil。如果您将
IBOutlet
连接到生活在故事板或XIB文件中的子类
AlarmIVDatePicker
,则只需使用该插座。对于选取器所在的视图,您是否使用了这两种方法?无论我如何引用datepicker,都可以使用IBOutlet或声明类变量。只是想我没有提到datepicker和stepper是文本的,不知道这有什么不同,Sokay,谢谢,所以感觉有点不好意思;datepicker被添加到带有故事板的视图中,并被一个IBOutlet引用,但我通过在viewDidLoad中为该变量分配一个新实例来实现这一点。通过你提供的信息让我明白了,谢谢不用担心,我真的很高兴你找到了答案!