InspectorWindowController

InspectorWindowController

我有一个示例项目:
https://github.com/ericgorr/nspanel_show.git
我的项目是一个故事板,基于文档的应用程序。我想使用自定义segue切换Inspector窗口的可见状态。我有什么工作要做,但我不能完全决定如何使巡查员的窗口成为一个单独的窗口。
我认为我应该从以下几点开始:

class InspectorWindowController: NSWindowController
{
    static let sharedInstance = InspectorWindowController()

//    override func init()
//    {
//
//    }

    override func windowDidLoad()
    {
        super.windowDidLoad()

        NSLog( ":::: %@", InspectorWindowController.sharedInstance );
    }
}

但在我的情况下初始化应该是什么样的,尤其是因为窗口位于故事板的内部。

最佳答案

以下是我如何修改您的代码:
Main.storyboard中,给InspectorWindowController一个标识符,例如“Inspector Window Controller”
InspectorWindowController中,按如下方式实现单例:

static let shared: InspectorWindowController = {
    let storyboard = NSStoryboard(name:"Main", bundle: nil)
    let controller = storyboard.instantiateController(withIdentifier: "Inspector Window Controller")
    return controller as! InspectorWindowController
}()

Main.storyboard中,删除从WindowControllerInspectorWindowController
WindowController中,将showMyPanel()hideMyPanel()i操作替换为:
@IBAction func toggleInspectorPanel( _ sender: AnyObject ) {
    let inspectorWindow = InspectorWindowController.shared.window!
    if inspectorWindow.isVisible {
        inspectorWindow.orderOut(self)
    } else {
        inspectorWindow.makeKeyAndOrderFront(self)
    }
}

同样在WindowController中,从NSLog()中删除windowDidLoad()调用。它会导致对初始化代码的递归调用。
InspectorWindowController.shared中,将Inspector工具栏按钮链接到Main.storyboard
将初始化toggleInspectorPanel()singleton,并在第一次引用时加载inspector面板(但未显示)。

09-04 05:44