我正在尝试捕获(Cocoa with Storyboards)应用程序窗口中某些控件上的鼠标按下事件。
如果我在
mouseDown(with event: NSEvent)
类中覆盖 ViewController
,我将面临两个问题:
斯威夫特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
)。
我是否遗漏了什么,或者这是捕获和处理鼠标按下事件的方法?
NSLevelIndicator
,我重写的方法没有被调用。为什么?虽然基思的上述答案被否决了(被一些白痴),但基思是正确的。它适用于 NSView 而不是 NSViewController。尽管苹果公司表明 MouseDown 对两者都适用,但在一些复杂的设置中,它会产生错误,最终导致无法跟踪 mouseDown 事件。您可以做的是分配一个事件跟踪器并查看
self
是否被点击。
示例:
NSEvent.addLocalMonitorForEvents
您必须重写 NSView mouseDown,而不是 NSViewController mouseDown。