如何在 NSView 上禁用鼠标点击和鼠标拖动?

How to disable mouse clicks and mouse drags on a NSView?

我正在使用 Swift 制作一个 mac 应用程序,这个应用程序有一个自定义视图(class 扩展 NSView 并覆盖其绘制方法)。现在,我想禁用此视图上的所有鼠标单击和鼠标拖动,并将它们传递给我的应用程序下面的其他应用程序 运行。

我已经尝试了以下方法(从 Apple 文档和其他 SO 问题中收集)来禁用对我的视图的点击,但到目前为止对我没有任何效果:

1.在我的自定义视图中覆盖 hitTest class

override func hitTest(_ point: NSPoint) -> NSView? {
    let view = super.hitTest(point)
    return view == self ? nil : view
}

2。在我的自定义视图中覆盖 acceptsFirstMouse class

override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
    return false
}

3。在 ViewController 以及我的自定义视图 class

中覆盖 mouseDown
override func mouseDown(with event: NSEvent) {
    // do nothing
}

4.在 ViewController 以及我的自定义视图 class

中覆盖 mouseDragged
override func mouseDragged(with event: NSEvent) {
    // do nothing
}

我是不是漏掉了什么?

这不是在视图级别处理的,而是在 window 级别处理的。您可以将 window 的 ignoresMouseEvents 属性 设置为 true。

问题是 Window 服务器只会将事件分派给单个进程。因此,一旦它到达您的应用程序,就不会转到另一个应用程序。而且您的应用也没有可行的方法来转发它。