macos - 使用 segue 时在 Cocoa 应用程序中打开“首选项 Pane ”的无限窗口

标签 macos cocoa segue nsmenuitem

当用户点击 Preferences... 菜单或输入 +, 时,我想在我的 Cocoa 应用程序中打开一个首选项 Pane 。因此,我从首选项菜单项连接到 Storyboard中的窗口 Controller 作为 show segue。

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

我只想在屏幕上显示一个首选项 Pane ,但我该如何做到这一点?我只想在 Storyboard 上设置它,并避免编码,使无聊的菜单项嵌套......

最佳答案

为了防止窗口多次启动,您可以从 Storyboard 上窗口 Controller 的属性检查器中选择Single

enter image description here

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

或者,如果您想使用代码,我将在 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 标识符。

关于macos - 使用 segue 时在 Cocoa 应用程序中打开“首选项 Pane ”的无限窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35817344/

相关文章:

swift - 使用 performSegue View 时停止重新加载 webview

macos - 播放声音的基本 OpenAL 代码

macos - 如何使用brew命令在mac中安装特定版本的maven

ios - Storyboard可以通过单元测试很好地扩展吗?

cocoa - "Potential null dereference."上的 Clang 错误

objective-c - 如何检测 NSURLConnection 的 sendSynchronousRequest 是否为 :returningResponse:error: ended up being timed out or other error

ios - Swift:在解雇的完成处理程序中呈现 VC

ios - 以编程方式创建的 UIViewController 上没有 segues

swift - 如何从 AppDelegate 回到当前窗口

android - Android NDK 更新版本的 (OSX) 路径在哪里?