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

时间:2011-02-02 02:13:48

标签: objective-c cocoa macos interface-builder nsmenuitem

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

我检查了isEnabled,它返回true。

此外,以编程方式创建的菜单项(使用initWithTitle且没有界面构建器)工作正常。

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

3 个答案:

答案 0 :(得分:18)

请记住设置菜单项的目标:

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

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

  •   

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

答案 1 :(得分:8)

如果某人可能会将其搞砸并获益,则声明“行动”方法没有:(id)sender参数:

-(IBAction) quit;

奇怪的是,setAction中的NSMenuItem方法吃了它并且没有抱怨。哦,好吧。

答案 2 :(得分:3)

啊,使用NSMenu ......

的瘟疫

查看<NSMenuValidation>

通常实现将如下:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
  return [menuItem isEnabled];
}