0

出于多种原因,我将 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 确实显示了一个菜单,而不是我想要的菜单(并且菜单委托不正确,等等)。

我怀疑从苹果鼠标只有一个按钮的时代开始,ctrl-left-click 存在某种遗留传播路径。如果我知道这些事件的指向(我认为它们不会发送到我的 NSPanel),我可能能够拦截它们。有谁知道他们去哪里?NSEvent 文档中有什么我正在盯着看但没有看到的东西吗?

4

0 回答 0