使用 segue 时在 Cocoa 应用程序中打开无限 window 首选项窗格

Open infinite window of Preferences Pane in Cocoa app when using segue

我想在用户点击 Preferences... 菜单或键入 + 时在我的 Cocoa 应用程序中打开一个首选项面板,。所以我从首选项菜单项连接到故事板中的 window 控制器作为 show segue。

但是,虽然这会在用户点击 Preferences... 时打开首选项窗格,但如果用户在关闭窗格之前再次点击菜单项,则会启动另一个窗格并显示在屏幕上。

我只想在屏幕上显示一个首选项窗格,但我该怎么做?我只想在情节提要上设置它,并避免编码使无聊的菜单项嵌套...

为了防止 windows 被多次启动,您 select Single 来自 Window 控制器的 属性检查器 在故事板上。

默认值为Multiple,导致启动无限windows。

或者,如果您想使用代码,这是我将在 AppDelegate.swift 中执行的操作。

extension AppDelegate: NSSeguePerforming {
    func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
        if identifier == OpenPreferencesIdentifier {
            let windows = NSApp.windows
            for window in windows {
                if window.windowController?.className == MyPreferencesWindowController.className() {
                    return false
                }
            }
        }

        return true
    }
}

另外不要忘记在 Storyboard 上设置适当的 segue 标识符。