15

我有一个菜单,其中包含在界面生成器中创建的几个项目。那里看起来不错,并选中了“启用”。但是当我运行应用程序时,所有的菜单项都是灰色的。

我检查过isEnabled,它返回true。

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

我在这里错过了什么吗?我对 OS X 开发真的很陌生。

4

3 回答 3

28

请记住设置菜单项的目标并确保所述目标实现菜单项的操作方法。

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

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

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

于 2014-01-26T09:45:43.497 回答
8

万一有人可能会通过谷歌搜索并从中受益,“Action”方法被声明为不带:(id)sender参数:

-(IBAction) quit;

奇怪的是,setActionmethod inNSMenuItem吃了它并没有抱怨。那好吧。

于 2011-02-02T17:37:45.477 回答
3

啊,使用的瘟疫NSMenu...

退房<NSMenuValidation>

通常实现会很简单:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
  return [menuItem isEnabled];
}
于 2011-02-02T03:49:18.173 回答