我一直在向我正在开发的OSX应用程序添加上下文菜单,并已成功为表格视图创建菜单。但是,我在向 NSDatePicker 添加上下文菜单时遇到问题。我已经将"菜单"插座连接到NSMenu,但是右键单击NSDatePicker不会显示菜单。
我已经检查了日期选择器上的菜单属性,它似乎设置正确。
尝试为 NSDatePicker 创建上下文菜单是否存在固有问题?如果是这样,有没有办法让它工作(没有重新实现NSDatePicker)?如果可能的话,我也希望避免使用额外的按钮来显示菜单 - 右键单击日期选择器显然是应该工作的直观方式。
在OS X 10.9.5上,class-dump
显示NSDatePicker
覆盖-rightMouseDown:
(以及-rightMouseDragged:
和-rightMouseUp:
)。我猜它不会调用超级,所以(不小心?)阻止了上下文菜单。
首先,在日期选择器中右拖动是否具有独特的作用?我没能看到它,但谁知道呢。这可能取决于datePickerStyle
和/或datePickerMode
。
另外,我没有看到-mouseDown:
的覆盖.所以,我敢打赌,按住 Control 键会调出上下文菜单。
我建议您接受此限制。但是,如果您确实想强制解决问题,则可能需要对NSDatePicker
进行子类化并覆盖-rightMouse...
方法。对于-rightMouseDown:
,您可以调用NSMenu* menu = [self menuForEvent:theEvent]
,如果返回菜单,则调用[NSMenu popUpContextMenu:menu withEvent:theEvent forView:self]
。否则,什么都不做(即不要调用super
)。
对于其他两种方法,您可能不应该执行任何操作来防止超类方法在没有获得鼠标右键向下事件时看到右拖动和鼠标向上事件而混淆。