Swift:如何确定在mouseDown上单击了哪个控件

时间:2019-05-05 21:20:52

标签: swift cocoa mouseevent appkit

我正在尝试在(带有故事板的可可)应用程序窗口中捕获某些控件上的鼠标按下事件。

如果我在mouseDown(with event: NSEvent)类中覆盖ViewController,则会遇到两个问题:

  1. 无法(直接)识别单击了窗口中的哪个控件。为此,我使用以下内容:

快捷键4:

    override func mouseDown(with event: NSEvent)
    {
        let point: NSPoint = event.locationInWindow
        let view: NSView = self.view.hitTest(point)!
        if type(of:view) == NSTextField.self // with tags is also fine
        {
            // do something with the control (in the example NSTextField)
            // (view as! NSTextField).backgroundColor = NSColor.systemPink
        }
    }

我有点困惑,为什么对于这样的基本GUI操作,没有鼠标单击所提供的“本机”事件处理程序(通过创建@IBAction)。 我是否缺少某些东西,或者这是捕获和处理鼠标按下事件的方式?

  1. 对于某些控件,例如NSLevelIndicator,未调用我的重写方法。为什么?

1 个答案:

答案 0 :(得分:-1)

您必须覆盖NSView mouseDown,而不是NSViewController mouseDown。