0

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

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

1. 在我的自定义 View 类中覆盖 hitTest

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

2.在我的自定义视图类中覆盖acceptsFirstMouse

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

3. 在 ViewController 以及我的自定义 View 类中覆盖 mouseDown

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

4. 在 ViewController 以及我的自定义 View 类中覆盖 mouseDragged

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

我错过了什么吗?

4

1 回答 1

2

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

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

于 2020-05-14T19:23:49.433 回答