gpt4 book ai didi

macos - 在 OS X Swift 应用程序中显示隐藏窗口

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:47 25 4
gpt4 key购买 nike

我正在使用 Swift 为 OS X Yosemite 开发一个简单的菜单栏应用程序。我需要的是显示首选项窗口(当用户点击菜单项时)窗口应在启动时隐藏,并应在用户调用时显示。

我找到了一个示例,它实现了我需要的相同功能:http://www.johnmullins.co/blog/2014/08/08/menubar-app/

这是我的应用程序中的一段代码:

class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var buildStatusMenu: NSMenu!
@IBOutlet weak var preferencesWindow: NSWindow!

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)
func applicationDidFinishLaunching(aNotification: NSNotification) {
self.preferencesWindow!.orderOut(self)
}

func showPreferencesWindow(sender: AnyObject?) {
self.preferencesWindow!.orderFront(self)
NSLog("Show window")
}

orderOut 工作正常,我在启动时没有看到窗口,但是当我尝试调用 showPreferencesWindow() 时,没有任何反应。 (但我在日志中看到一条记录)我确定这里没有魔法,我只是做错了什么。有人能帮我吗?提前致谢。

最佳答案

通常,在其 Info.plist 中具有 LSUIElement 的应用程序不会是事件应用程序。用户无法使用 Command-Tab 或 Dock 切换到它,因为它没有出现在那里。

当一个不活动的应用程序将一个窗口置于最前面时,它实际上并没有走到事件应用程序的前面。这会偷走焦点并打断用户,这通常是不希望的。相反,窗口最终位于前窗后面。

然而,对于菜单栏应用程序,您确实希望“窃取”焦点。用户刚刚请求了您的应用程序的一个窗口,因此它希望您的应用程序变为事件状态。这是适合将 true 传递给 NSApplicationactivateIgnoringOtherApps() 方法的少数情况之一。因此,您应该调用 NSApplication.sharedApplication().activateIgnoringOtherApps(true)。这将确保您的窗口最终出现在前面。

关于macos - 在 OS X Swift 应用程序中显示隐藏窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30153131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com