菜单项已启用,但仍呈灰色

发布于 2024-10-15 20:42:27 字数 223 浏览 2 评论 0原文

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

我检查了 isEnabled,它返回 true。

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

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

I have a menu with several items created in interface builder. It looks fine there and 'enabled' is checked. But when I run the application, all menu items are grayed out.

I've checked isEnabled, it returns true.

Also, menu items created programmatically (with initWithTitle and without interface builder) work just fine.

Am I missing something here? I'm really quite new to OS X development.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月野兔 2024-10-22 20:42:27

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

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

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

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

Remember to set your menu item's target and ensure that said target implements the menu item's action method.

menuItem.target = self;
  • If the menu item’s target is set, then NSMenu first checks to see if that object implements the item’s action method. If it does not, then the item is disabled. If the target does implement the item’s action method, NSMenu first checks to see if that object implements validateMenuItem: or validateUserInterfaceItem: method. If it does not, then the menu item is enabled. If it does, then the enabled status of the menu item is determined by the return value of the method.

  • If the menu item’s target is not set and the NSMenu object is not a contextual menu, then NSMenu uses the responder chain to determine the target. If there is no object in the responder chain that implements the item’s action, the item is disabled.

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

呆° 2024-10-22 20:42:27

如果有人可能会通过谷歌搜索并受益,则声明“Action”方法时没有 :(id)sender 参数:

-(IBAction) quit;

奇怪的是,NSMenuItemsetAction 方法> 吃了它并没有抱怨。那好吧。

In case somebody might google this out and benefit, 'Action' method was declared without :(id)sender parameter:

-(IBAction) quit;

Strangely, setAction method in NSMenuItem ate it and didn't complain. Oh well.

蘑菇王子 2024-10-22 20:42:27

啊,使用 NSMenu 的麻烦...

查看

通常实现会很简单:

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

Ah, the plague of using NSMenu...

Check out <NSMenuValidation>.

Usually the implementation will be as simple as:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
  return [menuItem isEnabled];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文