簡體   English   中英

NSDocument 選項卡窗口恢復

[英]NSDocument Tab Window Restoration

此問題涉及基於文檔的應用程序中的選項卡窗口恢復。

在 OSX 基於文檔的應用程序中,允許用戶創建和轉換選項卡窗口,我需要保留和恢復每個窗口的“選項卡”狀態。

目前,我的文檔控制器恢復其文檔窗口,但不恢復選項卡部署; 我取回單獨的窗口; 我可以將所有內容合並為一個,但是由於他們以前的分組丟失了,所以這太嚴厲了。

我的應用程序文檔類的 - makeWindowControllers()函數是我影響新控制器的地方,它們是否應該級聯,我認為在恢復期間是錯誤的:

//  Determine cascade based on state of application delegate
controller.shouldCascadeWindows = <app did receive applicationWillFinishLaunching>

所以在它完成啟動之前它是假的。

最后,我的窗口類具有方法:

override func addTabbedWindow(_ window: NSWindow, ordered: NSWindow.OrderingMode) {
    super.addTabbedWindow(window, ordered: ordered)
    window.invalidateRestorableState()
}
override func moveTabToNewWindow(_ sender: Any?) {
    super.moveTabToNewWindow(sender)
    self.invalidateRestorableState()
}

override func encodeRestorableState(with coder: NSCoder) {
    if let tabGroup = self.tabGroup {
        let tabIndex = tabGroup.windows.firstIndex(of: self)
        coder.encode(tabIndex, forKey: "tabIndex" )
        Swift.print("<- tabIndex: \(String(describing: tabIndex))")
    }
}

override func restoreState(with coder: NSCoder) {
    let tabIndex = coder.decodeInt64(forKey: "tabIndex")
    Swift.print("-> tabIndex: \(tabIndex)")
}

更改選項卡狀態時使窗口恢復狀態無效。 但是我不確定NSWindowRestoration協議的實現,當涉及文檔控制器時,誰或什么需要實現該協議。

我認為這就是從未調用過最后一個函數的原因。 我得到了關於編碼的調試輸出,但在下一個應用程序執行期間, restoreStore(coder:)函數從未被調用。

那么誰在這樣的環境中實現了這個窗口恢復協議,我想是我的問題,或者是一個體面的例子。

我的問題表明,對於基於文檔的應用程序,您不需要任何特殊的東西; 我在SimpleViewer更新了我的原型,它具有這種支持和環境,它具有 Swift5,一個基於文檔的應用程序支持選項卡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM