如何重新打开在 OS X 的故事板中创建的关闭窗口

Posted

技术标签:

【中文标题】如何重新打开在 OS X 的故事板中创建的关闭窗口【英文标题】:How do you re-open a closed window created in the storyboard in OS X 【发布时间】:2015-06-02 11:59:36 【问题描述】:

我的问题对这个问题很重要,但答案似乎不适用于 Swift/Storyboards。 Cocoa: programmatically show the main window after closing it with X

基本上,我有一个或多或少带有菜单、窗口和 ViewController 的默认应用程序。如果用户在应用程序运行时关闭了窗口,我该如何重新打开它?

我在应用程序中创建了一个操作,将连接委托给“打开”菜单项。在这个函数中,我想确保窗口是可见的。因此,如果用户关闭了它,它应该会重新出现。但我不知道如何访问关闭的窗口。 Storyboard 似乎不允许我在我的应用委托中为我的窗口创建一个出口。

【问题讨论】:

【参考方案1】:

这很容易存档,即使它不是一个优雅的解决方案。为您的主窗口控制器向您的应用程序委托添加一个新属性。在以下示例中,我将控制器称为MainWindowController

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate 
    var mainWindowController: MainWindowController? = nil
    func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool 
        mainWindowController?.window?.makeKeyAndOrderFront(self)
        return false
    

在主窗口控制器的初始化中,我在应用委托中注册了控制器:

class MainWindowController: NSWindowController 
    override func windowDidLoad() 
        super.windowDidLoad()
        // ...initialisation...
        // Register the controller in the app delegate
        let appDelegate = NSApp.delegate as! AppDelegate
        appDelegate.mainWindowController = self
    

就是这样,非常适合我。

【讨论】:

以上是关于如何重新打开在 OS X 的故事板中创建的关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章

从 AppDelegate 访问在故事板的 tableview 中创建的视图?

故事板按钮不会推动 Seque

如何在 MyScene(SKScene 的子类)中打开 xib 或故事板窗口?

如何使用 MAC OS MATLAB 读取在 windows MATLAB 中创建的 .mat 文件

单击窗口 x 轴的末端时,通过鼠标单击在 OpenGL 中创建的光线不正确?

在 Xcode 中重新制作故事板