繁体   English   中英

OS X菜单栏应用程序:如何将窗口带到前面

[英]OS X Menubar application: How to bring window to front

我正在为OS X开发一个仅限于菜单栏的应用程序,我正在努力获得一个设置窗口,以显示在其他应用程序前面。

应用设置

“仅限菜单栏的申请”是指:

  • 我从主故事板文件中的NSWindowController中删除了“Is Initial Controller”。 主要故事板的窗口未在我的应用程序中使用
  • 我在主故事板中的“应用场景”中添加了一个NSMenu 这将成为我的菜单栏菜单
  • 我将LSUIElement设置为YES以隐藏停靠图标
  • 我将LSBackgroundOnly设置为NO (请参阅NSWindow makeKeyAndOrderFront使窗口显示,但不显示Key或Front

当应用程序启动时,我创建一个NSStatusItem并添加NSMenu从故事板作为它的菜单。 这一切都很好 - 应用程序启动,显示没有窗口,没有停靠图标,但菜单项包含故事板中的菜单。

设置窗口

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

  • 创建了一个新的.xib文件并添加了一个NSWindow
  • 创建了一个连接出口和操作的自定义NSWindowController
  • 在应用程序启动时使用initWithNibNamed:实例化自定义NSWindowController

单击菜单中的“设置” - 条目时,我会尝试使用以下设置窗口:

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

窗口显示,但没有显示在前面,而是隐藏在其他应用程序后面。

任何想法如何解决这个问题? 谢谢!

你需要打电话:

[NSApp activateIgnoringOtherApps:YES];

(这是将YES传递给该方法的极少数情况之一。)

我知道你要求obj-c并且已经收到了答案,但只是任何人都可以使用Googling来实现Swift 4。

在您的类中扩展NSWindowController定义函数:

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

然后,无论何时想要提起它,请调用bringToFront()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM