我有一个菜单,其中包含在界面生成器中创建的几个项目。那里看起来不错,并选中了“启用”。但是当我运行应用程序时,所有的菜单项都是灰色的。
我检查过isEnabled
,它返回true。
此外,以编程方式创建的菜单项(使用initWithTitle
和不使用界面生成器)也可以正常工作。
我在这里错过了什么吗?我对 OS X 开发真的很陌生。
我有一个菜单,其中包含在界面生成器中创建的几个项目。那里看起来不错,并选中了“启用”。但是当我运行应用程序时,所有的菜单项都是灰色的。
我检查过isEnabled
,它返回true。
此外,以编程方式创建的菜单项(使用initWithTitle
和不使用界面生成器)也可以正常工作。
我在这里错过了什么吗?我对 OS X 开发真的很陌生。
请记住设置菜单项的目标并确保所述目标实现菜单项的操作方法。
menuItem.target = self;
如果设置了菜单项的目标,则 NSMenu 首先检查该对象是否实现了该项的操作方法。如果没有,则该项目被禁用。如果目标确实实现了项目的操作方法,NSMenu 首先检查该对象是否实现了 validateMenuItem: 或 validateUserInterfaceItem: 方法。如果没有,则启用菜单项。如果是,则菜单项的启用状态由方法的返回值确定。
如果未设置菜单项的目标并且 NSMenu 对象不是上下文菜单,则 NSMenu 使用响应者链来确定目标。如果响应者链中没有实现项目操作的对象,则项目被禁用。
万一有人可能会通过谷歌搜索并从中受益,“Action”方法被声明为不带:(id)sender
参数:
-(IBAction) quit;
奇怪的是,setAction
method inNSMenuItem
吃了它并没有抱怨。那好吧。
啊,使用的瘟疫NSMenu
...
通常实现会很简单:
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
return [menuItem isEnabled];
}