OS X 菜单栏应用程序:如何将 window 置于最前面

OS X Menubar application: How to bring window to front

我正在为 OS X 开发一个只有菜单栏的应用程序,我正在努力让设置 window 显示在其他应用程序的前面。

应用设置

"Menubar-only application" 表示:

当应用程序启动时,我创建了一个 NSStatusItem 并从情节提要中添加了 NSMenu 作为它的菜单。这一切工作正常 - 应用程序启动,没有显示 window 也没有停靠栏图标,而是一个包含故事板菜单的菜单栏项目。

设置window

我现在想添加一个设置 window,当单击菜单栏条目时会显示该设置。我因此:

单击菜单中的 "Settings" 条目后,我尝试使用以下方法将设置 window 置于最前面:

[self.settingsWindowController.window center];
[self.settingsWindowController.window showWindow:self];
[self.settingsWindowController.window makeKeyAndOrderFront:NSApp];

window 显示了,但没有带到前面而是隐藏在其他应用程序后面。

有什么解决办法吗?谢谢!

您需要致电:

[NSApp activateIgnoringOtherApps:YES];

(这是将 YES 传递给该方法是正确的罕见情况之一。)

对于Swift你可以使用

NSApp.activate(ignoringOtherApps: true)

我知道您要求的是 obj-c 并且已经收到了答复,但以防万一有人在谷歌上搜索 Swift 4 实现。

在扩展 NSWindowController 的 class 中定义函数:

func bringToFront() {
  self.window?.center()
  self.window?.makeKeyAndOrderFront(nil)
  NSApp.activate(ignoringOtherApps: true)
}

然后,无论何时你想调出它,调用 bringToFront()。