我是否可以有条件地禁用仅在第一个响应者响应选择器时启用的NSMenuItem?

时间:2015-11-03 20:47:30

标签: objective-c macos cocoa nsmenu nsmenuitem

我根据第一个响应者是否响应特定选择器来启用/禁用NSMenuItem

我的问题是我有条件想要为第一个响应者启用该项目。

但我不能在运行时有条件地删除方法定义以禁用菜单项

以我的意思为例:
我有一个基于NSDocument的应用程序,我有两个主要的子类 - ImageDocumentVideoDocument

我有一个名为“捕获帧”的NSMenuItem,它将视频帧转换为图像。但很明显,这应该在ImageDocument上停用,并且仅在VideoDocument上启用。

如果第一个响应者回复NSMenuItem

,则启用-captureFrame

VideoDocumentController有一个方法-captureFrame,因此已启用。 ImageDocumentController没有,因此菜单项永远不会启用。

但是,有一些特定的VideoDocument我不希望启用该菜单项。对于我来说,禁用此菜单项以处理特殊情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

VideoDocument班级中,覆盖NSDocument方法validateUserInterfaceItem:。或者,您可以覆盖validateUserInterfaceItem:的子类中的NSDocumentController。请务必致电super以保留此方法的内置功能。有关示例,请参阅Apple's docs on UI validation