由于多种原因,我已经将NSComboBox子类化,包括显示上下文菜单的策略,而操作系统不向他们添加任何神秘的东西。 (“将iTunes添加为语音轨道”???)以下是我的鼠标事件方法:
public override func mouseDown (event: NSEvent)
{ NSLog("mouseDown")
if NSEvent.modifierFlags().contains(.ControlKeyMask)
{ self.rightMouseDown(event) }
else
{ super.mouseDown(event) }
}
public override func rightMouseDown (event: NSEvent)
{ NSLog("rightMouseDown")
super.menu?.delegate = self
super.menu?.allowsContextMenuPlugIns = false
super.menu?.popUpMenuPositioningItem(nil, atLocation:
self.convertPoint(event.locationInWindow, fromView: nil), inView: self)
}
rightMouseDown方法执行我想要的最后一秒菜单配置。我认为(左)mouseDown方法也可以工作(它只是因为ctrl-left-click是右键单击的传统替代方法),除了控制键向下它永远不会看到鼠标事件。事件似乎通过绕过而不是通过我的子类进入超类,因为NSComboBox确实显示了一个菜单,而不是我想要的菜单(并且菜单委托不正确等)。
我怀疑从Apple Apple鼠标只有一个按钮的时代开始,ctrl-left-clicks存在某种遗留传播路径。如果我知道这些事件的指向(我不认为他们会去我的NSPanel),我可能会拦截他们。有谁知道他们去哪儿了? NSEvent文档中有什么东西我正盯着而不是看到吗?