Cocoa 应用程序菜单栏不可点击
Cocoa application menu bar not clickable
我正在我的 cocoa 应用程序中构建一个菜单栏,在我的自定义应用程序 @implementation
中使用以下代码 CustomApplication
:
+(void) setUpMenuBar
{
[CustomApplication sharedApplication];
// Main menu
NSMenu* mainMenu = [NSApp mainMenu];
if (mainMenu != nil) return; // We set it already
mainMenu = [[[NSMenu alloc] initWithTitle:@""] autorelease];
[NSApp setMainMenu:mainMenu];
// Application menu
NSMenuItem* appleItem = [mainMenu addItemWithTitle:@""
action:nil
keyEquivalent:@""];
NSString* appName = @"MyApp";
NSMenu* appleMenu = [[NSMenu alloc] initWithTitle:@""];
// Apple menu
[appleMenu addItemWithTitle:[@"About " stringByAppendingString:appName]
action:@selector(orderFrontStandardAboutPanel:)
keyEquivalent:@""];
// Quit
[appleMenu addItemWithTitle:[@"Quit " stringByAppendingString:appName]
action:@selector(terminate:)
keyEquivalent:@"q"];
[appleItem setSubmenu:[appleMenu autorelease]];
}
启动时,我的应用程序获得焦点,但菜单栏不可点击。
但是,如果我单击 window 并再次单击(将焦点返回给应用程序),它将变为可单击并正常工作。
我是不是漏掉了什么?
更新
当我按如下方式创建应用程序时调用此方法。
[更新] 这就是我开始申请的内容。它实际上是从 class.
的任何 @implementation
之外的 ocaml 绑定调用的第一件事
CustomApplicationDelegate* delegate = [CustomApplicationDelegate new];
[CustomApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
[[NSApplication sharedApplication] setDelegate:delegate];
[CustomApplication setUpMenuBar];
[[CustomApplication sharedApplication] finishLaunching];
好的,感谢@bhaller 的评论,我得以解决我的问题。
我实际上是这样把我的电话转给委托人的。
-(void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
[CustomApplication sharedApplication];
[CustomApplication setUpMenuBar];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
}
-(void)applicationDidFinishLaunching:(NSNotification *)notification
{
[CustomApplication sharedApplication];
[NSApp activateIgnoringOtherApps:YES];
}
我遇到了这个问题,原因是我对 [NSApp activateIgnoringOtherApps:YES]
的调用是在 applicationWillFinishLaunching:
而不是 applicationDidFinishLaunching:
。
我一移动它,菜单栏就开始工作了。
如果应用程序有 Window 和菜单栏,我通过删除 Info.plist 中的 LSUIElement
来修复。
旧的解决方案是我们用 [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
覆盖此配置,但在 Catalina 中,它不再起作用。
我正在我的 cocoa 应用程序中构建一个菜单栏,在我的自定义应用程序 @implementation
中使用以下代码 CustomApplication
:
+(void) setUpMenuBar
{
[CustomApplication sharedApplication];
// Main menu
NSMenu* mainMenu = [NSApp mainMenu];
if (mainMenu != nil) return; // We set it already
mainMenu = [[[NSMenu alloc] initWithTitle:@""] autorelease];
[NSApp setMainMenu:mainMenu];
// Application menu
NSMenuItem* appleItem = [mainMenu addItemWithTitle:@""
action:nil
keyEquivalent:@""];
NSString* appName = @"MyApp";
NSMenu* appleMenu = [[NSMenu alloc] initWithTitle:@""];
// Apple menu
[appleMenu addItemWithTitle:[@"About " stringByAppendingString:appName]
action:@selector(orderFrontStandardAboutPanel:)
keyEquivalent:@""];
// Quit
[appleMenu addItemWithTitle:[@"Quit " stringByAppendingString:appName]
action:@selector(terminate:)
keyEquivalent:@"q"];
[appleItem setSubmenu:[appleMenu autorelease]];
}
启动时,我的应用程序获得焦点,但菜单栏不可点击。 但是,如果我单击 window 并再次单击(将焦点返回给应用程序),它将变为可单击并正常工作。
我是不是漏掉了什么?
更新
当我按如下方式创建应用程序时调用此方法。 [更新] 这就是我开始申请的内容。它实际上是从 class.
的任何@implementation
之外的 ocaml 绑定调用的第一件事
CustomApplicationDelegate* delegate = [CustomApplicationDelegate new];
[CustomApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
[[NSApplication sharedApplication] setDelegate:delegate];
[CustomApplication setUpMenuBar];
[[CustomApplication sharedApplication] finishLaunching];
好的,感谢@bhaller 的评论,我得以解决我的问题。
我实际上是这样把我的电话转给委托人的。
-(void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
[CustomApplication sharedApplication];
[CustomApplication setUpMenuBar];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
}
-(void)applicationDidFinishLaunching:(NSNotification *)notification
{
[CustomApplication sharedApplication];
[NSApp activateIgnoringOtherApps:YES];
}
我遇到了这个问题,原因是我对 [NSApp activateIgnoringOtherApps:YES]
的调用是在 applicationWillFinishLaunching:
而不是 applicationDidFinishLaunching:
。
我一移动它,菜单栏就开始工作了。
如果应用程序有 Window 和菜单栏,我通过删除 Info.plist 中的 LSUIElement
来修复。
旧的解决方案是我们用 [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
覆盖此配置,但在 Catalina 中,它不再起作用。