NSDatePicker 可以有上下文菜单吗?

Can NSDatePicker have a contextual menu?

我一直在为我正在开发的 OSX 应用程序添加上下文菜单,并成功地为 table 视图创建了一个菜单。但是,我在向 NSDatePicker 添加上下文菜单时遇到问题。我已将 'menu' 插座连接到 NSMenu,但右键单击 NSDatePicker 不会调出菜单。

我检查了日期选择器上的菜单 属性,它似乎设置正确。

尝试为 NSDatePicker 创建上下文菜单是否存在固有问题?如果是这样,有没有办法让它工作(除了重新实现 NSDatePicker)?如果可能的话,我还希望避免使用额外的按钮来显示菜单 - 右键单击​​日期选择器显然是一种直观的工作方式。

在 OS X 10.9.5 上,class-dump 显示 NSDatePicker 覆盖 -rightMouseDown:(以及 -rightMouseDragged:-rightMouseUp:) .我猜它不会调用 super,因此(不小心?)阻止了上下文菜单。

首先,在日期选择器中右键拖动是否有独特之处?我没能看到它,但谁知道呢。它可能取决于 datePickerStyle and/or datePickerMode.

此外,我没有看到 -mouseDown: 的覆盖。所以,我敢打赌按住 Control 键单击会调出上下文菜单。

我建议您接受此限制。但是,如果你真的想强制解决这个问题,你可能需要继承 NSDatePicker 并覆盖 -rightMouse... 方法。对于 -rightMouseDown:,您可以调用 NSMenu* menu = [self menuForEvent:theEvent],如果 returns 是菜单,则调用 [NSMenu popUpContextMenu:menu withEvent:theEvent forView:self]。否则,什么都不做(即不要调用 super)。

对于其他两种方法,您可能不应该采取任何措施来防止超类方法在未获得鼠标右键按下事件时看到右键拖动和鼠标右键弹起事件而感到困惑.