我有一个菜单,其中包含在界面构建器中创建的多个项目。它在那里看起来很好并且检查了“启用” 但是当我运行应用程序时,所有菜单项都显示为灰色。
我检查了isEnabled
,它返回true。
此外,以编程方式创建的菜单项(使用initWithTitle
且没有界面构建器)工作正常。
我在这里遗漏了什么吗?我对OSX开发真的很陌生(事实上,这是我的第一天) 谢谢
答案 0 :(得分:18)
请记住设置菜单项的目标:
menuItem.target = self;
如果设置了菜单项的目标,则NSMenu首先检查该对象是否实现了该项的操作方法。如果没有,则禁用该项目。如果目标确实实现了项的操作方法,NSMenu首先检查该对象是否实现了validateMenuItem:或validateUserInterfaceItem:方法。如果没有,则启用菜单项。如果是,则菜单项的启用状态由方法的返回值确定。
如果未设置菜单项的目标且NSMenu对象不是上下文菜单,则NSMenu使用响应程序链来确定目标。如果响应者链中没有实现项目操作的对象,该项目已被禁用。
答案 1 :(得分:8)
如果某人可能会将其搞砸并获益,则声明“行动”方法没有:(id)sender
参数:
-(IBAction) quit;
奇怪的是,setAction
中的NSMenuItem
方法吃了它并且没有抱怨。哦,好吧。
答案 2 :(得分:3)
NSMenu
...... 的瘟疫
通常实现将如下:
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
return [menuItem isEnabled];
}