是否有創建基於單文檔界面(SDI)文檔的可可應用程序的方法? 我不希望用戶一次打開多個文檔。單文檔界面基於可可應用程序的文檔
回答
您應該能夠通過基於Cocoa應用程序模板創建新的Xcode項目來獲取所需的UI,請確保取消選中「創建基於文檔的應用程序」。
你必須親自編寫Open/Save命令,並從NSDocument
和朋友那裏更改你的類,但它應該是可行的。
你可以這樣做,它不是太糟糕。
一般方法:使用NSDocument,您必須將其自身附加到單例NSWindowController,它是您的應用程序的xib。當沒有文檔打開時,您甚至可以在該窗口中添加其他內容。這種設計對我的作品很大,因爲我一直在玩所有NSDocument功能,等等
這裏去一些更詳細:
刪除所有其他窗口
您將使用新窗口,因此請刪除由Xcode創建的應用程序模板中可能缺省的任何內容。也許在你的MainMenu.xib中,擺脫這一切,或將它移到你的新xib。
創建你的未來NSWindowController
只要創建一個用於測試的佔位符,以後我們會更多的方式給它添加一個新的廈門國際銀行(窗口)(因爲它是我們的主窗口,用戶總會看到)。
創建自己的NSWindowController,使之成爲單身
所以,你的NSWindowController中,創建一個加載您的廈門國際銀行(僅一次),並返回這個單一單隨時它被稱爲一個單包裝。我用了一個幫手的#define,看看這裏的更多信息:https://gist.github.com/1057420
+ (id) singletonInstance {
DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
return [[self alloc] initWithWindowNibName:@"yourxibfilename"];
});
}
修改您NSDocument,使其重視僅此單窗口
添加這樣的事情你NSDocument基於文檔。基本上你會告訴Document使用你擁有的單例窗口,並且應該自動調用NSWindowController內部的setDocument來替換它顯示的任何現有的NSDocument。
- (void)makeWindowControllers {
ReceiptDocumentWindowController *wc = [ReceiptDocumentWindowController singletonInstance];
[self addWindowController:wc];
}
考慮在關閉時從NSWindowController中刪除NSDocument,以確保它不會四處移動。在某些情況下,我認爲這不是必需的,但您也可以調查。所以,你也文件NSDocument裏面:
- (void)close {
[self removeWindowController:[ReceiptDocumentWindowController singletonInstance]];
[super close];
}
測試 - 你現在應該有一個原型解決方案的工作
將有與它的一些問題,而這些都取決於您的具體要求。
首先,您可以考慮使用您自己的NSDocumentController在打開新文檔之前自動關閉所有打開的文檔。你需要進一步研究這一點。
回到我提到的那個NSViewController,以及如何使用「當前打開的文檔」進行更新。我在NSWindowController中添加了一些粘合劑來設置文檔,以便將打開的任何文檔附加到我的下游IBOutlet連接的xib實例(如此NSViewController)。好吧,是這樣的:
- (void)setDocument:(NSDocument *)lDocument {
[super setDocument:lDocument];
if (lDocument != nil && self.receiptDetailViewController != nil)
self.receiptDetailViewController.representedObject = lDocument;
}
現在,在我的NSDocumentViewController所代表的對象具有使用可可綁定到NSViewController.representedObject綁定意見。所以,賓果,它使我的東西幾乎像魔術一樣。我建議像這樣封裝,這樣你就可以專注於用xib中的視圖來呈現文檔,而NSViewController現在可以引用任何被打開的文檔。
如果這不夠清楚,請告訴我。我會發布更多的代碼。 祝你好運,讓我知道如果這有幫助。
Marcus Williford
謝謝你的建議。我將在稍後嘗試! –
- 1. 具有多種文檔類型的可可基於文檔的應用程序
- 2. 可可基於文檔的應用程序
- 3. 可可CoreData和非基於文檔的應用程序
- 4. 多個Windows在非基於文檔 - 可可應用程序
- 5. cocoa基於文檔的應用程序
- 6. 基於文檔的Cocoa應用程序中的文檔類型
- 7. 基於文檔的可可應用程序的多個上下文?
- 8. 將可可基於文檔的文檔標記爲髒
- 9. 如何防止基於文檔的可可應用程序打開任何文檔?
- 10. 預加載的基於文檔的桌面應用程序
- 11. 在基於可可文檔的應用程序中刪除保存功能
- 12. 可可:非基於文檔的應用程序,數組控制器綁定?
- 13. 「另存爲」在基於非文檔的應用程序中可可
- 14. 基於文檔的應用程序中的不同菜單欄
- 15. 連接基於文檔的應用程序中的菜單項
- 16. 如何在基於Cocoa文檔的應用程序中關閉文檔?
- 17. 在Swift基於文檔的應用程序中重命名文檔類
- 18. NSDocument *類僅適用於基於文檔的應用程序嗎?
- 19. 關聯的文件類型/擴展到非基於文檔的可可應用
- 20. C++,MFC,選項卡式文檔界面應用程序,Win32
- 21. 在Cocoa應用程序上禁用基於文檔的功能
- 22. 如何使用XCTest測試基於文檔的應用程序?
- 23. 使用窗口的文檔圖標彈出菜單的基於Cocoa文檔的應用程序中的錯誤
- 24. NSDocumentController如何插入我的基於文檔的應用程序?
- 25. 基於文檔的應用程序中的NSNotificationCenter
- 26. 基於樹的PHP Web應用程序的文檔
- 27. 基於文檔的應用程序中的NSUndoManager錯誤行爲
- 28. Visual Studio是一個多文檔還是單文檔界面?
- 29. 適用於Mac的Qt Creator的單文檔界面
- 30. C#.NET基於文檔的應用程序操縱圖
你爲什麼要這樣做?這是不平凡的,因爲通常不建議僅支持單個打開的文檔。 –
我寫的應用程序是像GarageBand這樣的音樂軟件。一次訪問硬件有限制,所以我不希望用戶一次打開多個歌曲文件。 –