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

Macos 在OS X Swift应用程序中显示隐藏窗口,macos,swift,xcode6,Macos,Swift,Xcode6,我正在使用Swift为OS X Yosemite开发一个简单的菜单栏应用程序。 我需要的是显示首选项窗口(当用户单击菜单项时) 窗口应该在启动时隐藏,并且应该在用户调用它时显示 我找到了一个示例,它实现了我需要的相同功能: 这是我的应用程序中的一段代码: class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var buildStatusMenu: NSMenu! @IBOutlet weak va

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

我找到了一个示例,它实现了我需要的相同功能:

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

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
的应用程序不会是活动应用程序。用户无法使用命令选项卡或Dock切换到它,因为它没有出现在那里

当一个非活动的应用程序在前面订购一个窗口时,它实际上不会在活动的应用程序前面。这将窃取焦点并中断用户,这通常是不可取的。取而代之的是,该窗口最终位于前窗口的后面


然而,对于菜单栏应用程序,您确实希望“窃取”焦点。用户刚刚请求了你的一个应用程序窗口,因此它希望你的应用程序处于活动状态。这是极少数适合将true传递给
NSApplication
activateIgnoringOtherApps()
方法的情况之一。因此,您应该调用
NSApplication.sharedApplication().activateIgnoringOtherApps(true)
。这将确保您的窗口实际位于前面。

首选项窗口的框架是什么?另外,您确定“首选项”窗口不在屏幕上,而是在其他窗口后面吗?您可能需要执行
NSApplication.sharedApplication().activateIgnoringOtherApps(true)
。您好。谢谢你的回答!我真的不知道什么是“框架”:)我是OSX开发的新手,对此很抱歉:)但是你的配方似乎很完美:)你能解释一下,你的配方是什么,框架是什么吗?:)好吧,这是两个不同的问题。框架是窗口的大小和位置(x、y、宽度、高度)。我想知道窗口是否位于屏幕边界之外。因为第二个建议有效,所以听起来它好像不在屏幕之外。我将在回答中对此进行更完整的解释。