2

我的意思是,我真的不明白。可可「視圖」系統如何工作?

我正在寫這個應用程序,我需要一個側欄,它改變了窗口的主要部分的內容。

我讀了幾篇關於ViewController,WindowController等的文檔。我不明白的是這應該是「簡單」甚至是模塊化的。

因此,我們來看一下這個例子。

我有這個應用程序,其中包括一個簡單的菜單在左側,並在中間可能包含或不包含子菜單(基於我們正在查看哪個頁面)的主視圖。我希望這些觀點能夠在同一個窗口中,並且彼此獨立。主屏幕應該只顯示它​​的內容,並且不知道菜單,窗口等等。

我創建了幾個ViewControllers,我想給用戶顯示一個視圖,每個視圖都有它的每個視圖Xib文件,我可以繪製我希望它顯示的界面。

如何根據用戶在左側尺寸上選擇的內容更改主視圖?我不是在談論代碼本身,而是在談論它背後的邏輯應該如何工作。

窗口控制器應該知道它的碎片嗎?主菜單是否應該包含主窗口,以便可以更改它?我應該在主窗口中使用佔位符(自定義視圖)來插入其他視圖嗎?

回答

2

您希望使主視圖與菜單,窗口等無關,是一個不錯的選擇。當然沒有一種方法可以做到這一點,但我要做的方式是讓窗口控制器成爲處理從菜單中輸入信息並將主視圖區域切換到正確視圖的對象。

要真正處理切換視圖,我會使用一個NSTabView,這是完全用於此目的。您可以在Interface Builder中進行設置,使其不會實際繪製製表符,對用戶是「不可見」的,只需以編程方式切換製表符。

帶有製表符視圖的一個掛斷是它本身並不是設計用於在多個視圖控制器的視圖之間切換(NSViewController是Cocoa歷史上相對較新的類)。所以,你必須讓窗口控制器保持對視圖控制器(強壯)的引用(即擁有它們),並且只需要將它們的視圖根據需要交給標籤視圖。我在許多應用程序中使用這種確切的方法,並且運行良好。

+0

非常感謝提示! 但是,我在尋找一些更一般的東西。如果您要顯示一系列視圖,該怎麼辦?佔位符是一個好主意嗎? – XelharK

+1

筆尖中的佔位符視圖很好。您可以在運行時將它們替換爲真實視圖。一般來說,高層控制器(在這種情況下是窗口控制器)應該是「知道」它是兒童部件的東西。兄弟姐妹之間的鬆散耦合(例如主視圖和菜單)很好,理想情況下,元素不需要知道任何關於其父母的具體內容(例如菜單不知道窗口控制器)。這有幫助嗎? –

+0

當然!我一直在與幾個平臺合作,但可可的視圖和視圖控制器是非常奇怪和複雜的,我想..我只需要一些一般性的指導和'做和不做'。 – XelharK