Cocoa application menu bar not clickable

故事扮演 提交于 2019-12-05 02:41:05

问题


I'm building a menu bar in my cocoa application with the following code in the @implementation of my custom application 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]];
}

At launch, my application gets the focus, but the menu bar is not clikable. However, if I click out the window and in again (giving the focus back to the application), it becomes clickable and working correctly.

Did I miss something?


UPDATE

This method is called when I'm creating the application as follows. [UPDATE] This is what I'm starting my application with. It is actually called first thing from an ocaml binding outside any @implementation of a class.

CustomApplicationDelegate* delegate = [CustomApplicationDelegate new];

[CustomApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];

[[NSApplication sharedApplication] setDelegate:delegate];

[CustomApplication setUpMenuBar];

[[CustomApplication sharedApplication] finishLaunching];

回答1:


Okay, thanks to the remarks of @bhaller I was able to solve my problem.

I actually transferred my calls to the delegate as follows.

-(void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
  [CustomApplication sharedApplication];
  [CustomApplication setUpMenuBar];
  [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
}

-(void)applicationDidFinishLaunching:(NSNotification *)notification
{
  [CustomApplication sharedApplication];

  [NSApp activateIgnoringOtherApps:YES];
}



回答2:


I had this issue and the reason was because my call to [NSApp activateIgnoringOtherApps:YES] was in applicationWillFinishLaunching: instead of applicationDidFinishLaunching:.

As soon as I moved it, the menubar worked on first-launch.



来源:https://stackoverflow.com/questions/33345686/cocoa-application-menu-bar-not-clickable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!