我正在以编程方式使用 NSMenuItem
创建一个 NSMenu
。当应用程序的窗口处于事件状态时,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/