objective-c - 为什么当窗口失去焦点时这个 NSMenuItem 会被禁用?

标签 objective-c macos cocoa nswindow nsmenu

我正在以编程方式使用 NSMenuItem 创建一个 NSMenu。当应用程序的窗口处于事件状态时,NSMenuItem 被启用:

Enabled NSMenuItem

但是,一旦窗口失去焦点,菜单项就会被禁用:

Disabled NSMenuItem

以下是我创建 NSMenu 的方法:

- (void)_quit
{
  [[NSApplication sharedApplication] terminate:nil];
}

- (NSMenu *)_setupMenu
{
  NSMenu *statusMenu = [[NSMenu alloc] initWithTitle:@"Demo"];
  NSMenuItem *quit = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(_quit) keyEquivalent:@""];

  [statusMenu addItem:quit];

  return statusMenu;
}

是什么导致了这个问题?无论应用程序是否处于焦点状态,我该如何启用它?

最佳答案

因为菜单项是基于响应者链启用的。

就您的情况而言,您可以使用 terminate: 选择器而不是您自己的选择器。
由于这是在 NSApplication 类中声明的,该类也是响应者链的一部分,因此该项目将始终处于事件状态。

NSMenuItem *quit = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@""];

更多信息请参见:Cocoa Event Handling Guide

关于objective-c - 为什么当窗口失去焦点时这个 NSMenuItem 会被禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767649/

相关文章:

objective-c - NSOutlineView + DataSource 正确设置。如何添加ImageAndTextCell?

iphone - 链接具有可达性的 UITableView 单元格

objective-c - Sprite 表 : tool to get coordinates

linux - 按名称查找文件夹然后复制文件

iphone - 如何在UIWebview上显示.asmx页面?

xcode - 从WebView获取当前URL和标题

ios - 检索个人资料图片 iOS Parse.com

macos - 如何在 mac os x 上设置 postgres 管理员用户?

xcode - Cocoa:防止窗口离开屏幕

swift - 无法调用非函数类型的值 'AnyObject!?"Swift