为什么当窗口失去焦点时,此NSMenuItem会被禁用?

时间:2013-07-20 23:21:41

标签: objective-c macos cocoa nswindow nsmenu

我以编程方式创建NSMenu NSMenuItem。当应用程序的窗口处于活动状态时,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;
}

导致此问题的原因是什么?无论应用程序是否处于关注状态,我该如何启用它?

1 个答案:

答案 0 :(得分:2)

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

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

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

有关此内容的更多信息:Cocoa Event Handling Guide