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

Can I conditionally disable an NSMenuItem that is only enabled when the first responder responds to a selector?

我有一个 NSMenuItem 是 enabled/disabled 基于第一响应者是否响应特定选择器。

我的问题是在某些情况下我希望为第一响应者启用该项目。

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

举例说明我的意思:
我有一个基于 NSDocument 的应用程序,我有两个主要的子类——一个 ImageDocument 和一个 VideoDocument

我有一个名为 "Capture Frame" 的 NSMenuItem,它可以将视频的帧转换为图像。但显然这应该在 ImageDocument 上禁用,并且仅在 VideoDocument.

上启用

如果第一响应者响应 -captureFrame

,则启用 NSMenuItem

VideoDocumentController 有一个方法,-captureFrame,所以它被启用了。 ImageDocumentController 没有,所以菜单项永远不会启用。

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

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