NSMenuItem 更新到 Sonoma 后不可单击

NSMenuItem not clickable after updating to Sonoma

提问人:mrrxgers 提问时间:10/25/2023 最后编辑:mrrxgers 更新时间:10/25/2023 访问量:62

问:

我有一个 CEF 应用程序,其中菜单栏是以编程方式设置的。在 Ventura 上,菜单栏的行为符合预期,但在更新到 Sonoma 后,单击任何菜单项都不会展开它。这包括 Apple 菜单。

void setup_menu()
{
   @autoreleasepool
   {
      NSMenu* menubar = [NSMenu new];
      [NSApp setMainMenu:menubar];

      NSMenuItem *appMenuItem = [menubar addItemWithTitle:@"" action:nil keyEquivalent:@""];
      NSMenu *appMenu = [NSMenu new];
      [menubar setSubmenu:appMenu forItem:appMenuItem];
      [appMenu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"h"];
      [appMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];

      NSMenuItem *editMenuItem = [menubar addItemWithTitle:@"" action:nil keyEquivalent:@""];
      NSMenu *editMenu = [[NSMenu alloc] initWithTitle:@"Edit"];
      [menubar setSubmenu:editMenu forItem:editMenuItem];
      [editMenu addItemWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"];
      [editMenu addItemWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"];
      [editMenu addItemWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"];
      [editMenu addItemWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"];
   }
}
  • 此函数在创建窗口之后但在显示窗口之前调用。
  • 我定义的快捷方式都有效。
  • 我定义的 NSMenuItems 都已启用并显示在菜单栏中,但无法与之交互。

为什么这种情况只发生在索诺玛,我该如何解决?

Objective-C nsmenu nsmenuitem macOS-Sonoma

评论

1赞 Willeke 10/25/2023
这仅在 Sonoma 中发生,因为“在 macOS 14 中,菜单已从头开始重新实现以完全使用 AppKit。请参阅适用于 macOS 14 的 AppKit 发行说明

答: 暂无答案