我有一个基于文档的 macOS 应用程序,它是一个基本的文本编辑器。默认行为是为每个打开的文档创建一个新窗口。但是我希望一次只显示一个窗口,并且在打开文档或创建新窗口时,这应该发生在同一个窗口中,从而替换旧文档。
我试图通过不实例化新的窗口控制器而是重用旧的窗口控制器来对该makeWindowControllers
方法进行一些黑客攻击。NSDocument
但是在这种方法出现一些问题之后,我认为这不是正确的方法。我想知道是否有解决此问题的通用方法。
这是我尝试过的代码
class Document: NSDocument {
static var sharedWindow: NSWindowController?
override func makeWindowControllers() {
// Instaniate window controller there is none
if Document.sharedWindow == nil {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
Document.sharedWindow = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("Document Window Controller")) as? NSWindowController
}
guard let sharedWindow = Document.sharedWindow else { return }
if let previousDocument = sharedWindow.document as? NSDocument {
previousDocument.close()
}
self.addWindowController(sharedWindow)
sharedWindow.contentViewController?.representedObject = content
(sharedWindow.contentViewController as? ViewController)?.handleOpenDocumentOperation()
}
...
}