2009-07-12 24 views
7

我想通過選項卡式界面在單個窗口中編寫可能具有多個文檔的應用程序。我應該避免使用NSDocument體系結構(可可基於文檔的應用程序模板)嗎?據我所知,它只支持每個文檔一個或多個窗口,但反之亦然。可可中的單個窗口中的多個文檔

我一直在琢磨這個問題一段時間,並已經在NSDocument架構上構建了很多我的應用程序,但是我找不出一個將多個文檔與單個窗口關聯的好方法。

編輯:我想除了基本的文檔窗口之外還有項目文檔窗口。在這樣複雜的層面上,它是否值得黑客入侵NSDocument架構呢? Apple是否使用NSDocument體系結構編寫了Xcode(它以這種方式工作)?

+0

它似乎xcode的確使用NSDocument,但在項目中有多個選項卡的窗口只是一個文檔(項目) – cobbal 2009-07-13 00:02:06

+1

也是一個非常有趣的工具,在可可應用程序中查看它們是如何做到的是F腳本http://www.fscript.org/ – cobbal 2009-07-13 00:02:46

+0

@cobbal:有趣的。這是否意味着文本文件不被表示爲NSDocuments? – titaniumdecoy 2009-07-13 00:05:19

回答

3

幾年前,我試圖將一個NSDocument應用程序鎖入一個單獨的窗口選項卡式界面,並在幾個月後結束瞭如此沮喪以便重新構建文檔體系結構部分。這不是不可能的,但是你最終會遇到如此多的問題,以至於最終的結果幾乎不像一個合適的NSDocument應用程序。最好是重寫你需要的位,而不是結束大量的代碼來顛覆Cocoa框架。

+0

這不是真正的代碼,你可以[從我的指南閱讀](http://cutecoder.org/programming/window-multiple-documents/)。 – adib 2013-02-28 12:46:00

4

在這種情況下使用基於NSDocument的體系結構不一定是個壞主意;但它可能需要相當多的討價還價。

這很有可能你不僅需要NSDocument的子類,而且也很少有子類同輩的NSDocumentController。一旦完成,應該是一件簡單的事情,以劫持和避免對-makeWindowControllers和其他窗口相關方法的調用,允許您以任何方式打包文檔「窗口」,但仍保留文檔的好處 - 基於應用。

2

另一種我尚未嘗試但計劃實施的技術是爲每個文檔設置一個無邊框窗口。這樣一個文件有一個窗口,可能或不可見。

然後,有一個包裝窗口包含實際的窗口邊框,以及任何控件之間切換哪些無邊界文檔窗口/窗口是可見的。文檔窗口是包裝器的子窗口,當窗口被移動/最小化/關閉/等時,確保兩者都被鏈接。

對於每個無邊界文檔窗口,封裝器窗口都有一個佔位符視圖,當調整大小時,將調整文檔窗口的大小,並將文檔窗口的視圖注入響應者鏈(發送到佔位符視圖的任何事件將發送到文檔窗口的視圖,然後傳遞到佔位符的父視圖)。

還有一些小的細節需要解決,但我認爲這種方法很好。

5

我有同樣的項目 - 我想在單個窗口中顯示不同的獨立文檔,並帶有允許在文檔之間切換的側欄 - 所以我已經完成了一些自己的搜索。

我剛剛通過閱讀Cocoadev的Document Based App With One Window For All Documents參考,發現了一個有趣的領先。從MikeTrent的回答看來,使用NSDocument是一種非常可行的方法。你只需要繼承NSDocumentController。

我也喜歡Abhi's idea使用無邊界子窗口。

相關問題