gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:37:07 28 4
gpt4 key购买 nike

我正在以编程方式使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com