菜单项已启用,但仍显示为灰色

Nik*_*bak 13 macos cocoa objective-c interface-builder nsmenuitem

我有一个菜单,在界面构建器中创建了几个项目.它在那里看起来很好,并且检查了"启用".
但是当我运行应用程序时,所有菜单项都显示为灰色.

我已经检查过isEnabled,它返回true.

此外,以编程方式创建的菜单项(使用initWithTitle和不使用界面构建器)工作正常.

我在这里错过了什么吗?我对OSX开发真的很陌生(事实上,这是我的第一天).
谢谢

pka*_*amb 21

记得设置菜单项的目标:

menuItem.target = self;
Run Code Online (Sandbox Code Playgroud)
  • 如果设置了菜单项的目标,则NSMenu首先检查该对象是否实现了该项的操作方法.如果没有,则禁用该项目.如果目标确实实现了项的操作方法,NSMenu首先检查该对象是否实现了validateMenuItem:或validateUserInterfaceItem:方法.如果没有,则启用菜单项.如果是,则菜单项的启用状态由方法的返回值确定.

  • 如果未设置菜单项的目标且NSMenu对象不是上下文菜单,则NSMenu使用响应程序链来确定目标.如果响应者链中没有实现项目操作的对象,则禁用该项目.

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html

  • 谢谢,好的提示! (2认同)

Nik*_*bak 8

如果某人可能会谷歌这个并且受益,那么'Action'方法被声明没有:(id)sender参数:

-(IBAction) quit;
Run Code Online (Sandbox Code Playgroud)

奇怪的是,setAction方法NSMenuItem吃了它并没有抱怨.那好吧.