我建立我的自定义应用程序CustomApplication
的@implementation
我用下面的代码可可应用程序中的菜单栏:Cocoa应用程序菜单栏不可点击
+(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]];
}
启动时,我的应用程序获得焦点,但菜单栏不可克服。 但是,如果我单击窗口并再次(将焦点重新提供给应用程序),它将变为可点击并正常工作。
我错过了什么吗?
UPDATE
当我创建的应用程序如下该方法被调用。 [更新]这就是我开始我的应用程序。它实际上是从一个类的任何@implementation
以外的ocaml绑定中被调用的第一件事。
CustomApplicationDelegate* delegate = [CustomApplicationDelegate new];
[CustomApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
[[NSApplication sharedApplication] setDelegate:delegate];
[CustomApplication setUpMenuBar];
[[CustomApplication sharedApplication] finishLaunching];
您还没有说过如何/何时调用了此setUpMenuBar方法。我还建议将[NSApp setMainMenu:mainMenu]调用移到该函数的末尾,以便在NSApp完成设置后将菜单提供给NSApp;我可以想象,NSApp解析它给出的菜单结构并缓存关于它的信息,这可能解释了为什么它最初是不起作用的。总的来说,我的反应是:“呃,你为什么要这样做而不是使用笔尖?”但我试图压制我的反应...... – bhaller
好吧,我编辑了我的消息以提供更多信息。至于我为什么决定不使用笔尖,我实际上正在研究一个跨平台的库。 –
哦,你的解决方案不起作用,无论如何,谢谢。 –