如何在 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 服务器只会将事件分派给单个进程。因此,一旦它到达您的应用程序,就不会转到另一个应用程序。而且您的应用也没有可行的方法来转发它。
我正在使用 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
中覆盖 mouseDownoverride func mouseDown(with event: NSEvent) {
// do nothing
}
4.在 ViewController 以及我的自定义视图 class
中覆盖 mouseDraggedoverride func mouseDragged(with event: NSEvent) {
// do nothing
}
我是不是漏掉了什么?
这不是在视图级别处理的,而是在 window 级别处理的。您可以将 window 的 ignoresMouseEvents
属性 设置为 true。
问题是 Window 服务器只会将事件分派给单个进程。因此,一旦它到达您的应用程序,就不会转到另一个应用程序。而且您的应用也没有可行的方法来转发它。