2011-03-02 122 views
2

我希望我的應用程序擁有單個文檔,但不需要使用多個窗口就可以顯示多個屏幕。達到此目的的最佳方式是什麼?我正在考慮使用一個NSPersistentDocument,它將以顯示一組控件的NSViewController開始,然後將該視圖交換爲另一個NSViewController。我應該使用NSViewController嗎?

我的問題是:這是NSViewControllers的正確使用嗎?它可以完成嗎?如果兩者的答案都是肯定的,那麼如何在文檔中交換另一個視圖?

回答

7

是的,這是完全可以做到的。是的,你應該使用視圖控制器,但你不必。這完全是一種風格選擇。如果你不使用視圖控制器,那麼所有的控制器邏輯都可能在你的單個窗口控制器中。這可能會讓一個大應用程序變得痛苦。視圖控制器可幫助您將UI分解爲邏輯組件和控制單元。

你會去這樣做的視圖控制器方法是這樣的:

  • 創建爲您的每個組成部分的觀點不同的xibs。
  • 對於每個xib,創建一個加載,擁有和控制它的視圖控制器子類。
  • 您可以進一步研究這個問題,併爲視圖內的單獨區域設置子視圖控制器。
  • 在你awakeFromNib類的窗口控制器,實例化所有的頂級視圖控制器。

現在,您已經掌握了具有多個頂級視圖控制器的應用程序的基本框架。從這裏的任務,你需要他們或作爲用戶輸入指示要安排在主窗口的意見。有時候,你可能有3-4個頂級的觀點有時是1,在你的情況下,你只是想換出一個用於另一個。這些場景之間沒有太大的區別。

有很多種方法來實現這一目標。

針對您的特殊情況下,一個簡單的方法去了解它是:

  • 使用頂級tabless和無國界的標籤視圖和編程設置選定的選項卡。

一般來說,你可以做很多事情:

  • 手動排列在主窗口中的內容視圖的子視圖。
  • 根據需要移動(動畫)子視圖進/出或可視區域內。
  • 在主窗口中使用拆分視圖來摺疊和取消您想要或不想顯示的區域。

順便說一句,無論您是在創建基於文檔的應用程序還是基於應用程序的單窗口或多窗口文檔,此方法都可以工作。

使用視圖控制器的一個缺點是許多頂層視圖佈局和管理必須以編程方式完成,而不是在IB中完成。但這並不困難。

通常,您只需要執行addSubview:和setFrame:,將您的視圖放置在已經在IB中佈局的父視圖中。

但是要做更復雜和手動的東西,您應該閱讀文檔並瞭解以下工作:框架/邊界,翻轉座標,自動調整,以及如何覆蓋自動調整以執行自己的佈局。

+0

作爲一個參考,下面是我想要做的一個例子:http://developer.apple.com/library/mac/#samplecode/ViewController/Introduction/Intro.html – ruipacheco 2011-03-05 15:26:02

0

它可以按照您的描述完成,但您必須手動管理與文檔的關係,因爲爲簡單起見,默認配置假定爲單文檔 - >單控制器關係。

一旦脫離標準設計,就會失去所有內置功能。

您可能想重新考慮您的設計。將文檔鏈接到特定的視圖控制器的目的是爲用戶提供文檔的隱喻。就用戶而言,視圖文檔。如果您提供同一文檔的多個視圖,則用戶最有可能會解釋爲具有多個文檔,因爲這是UI語法所培訓的預期內容。

當您發現自己在UI中做了非標準的事情時,請停下來仔細思考。僅僅因爲你作爲開發者理解發生的事情並不意味着用戶會這樣做。

-2

有關使用NSNavigationController來管理多個視圖是什麼 - 它可以很容易地推和彈出不同的看法?

+0

你的意思是UINavigationController?我沒有爲iOS開發。 – ruipacheco 2011-03-09 22:49:39

+0

你是對的 - 我的不好!抱歉 – ferdil 2011-03-12 17:45:42