2011-07-05 65 views
9

我有一個應用程序,其佈局與iTunes類似。主窗口是一個NSSplitView。動態更改NSSplitView中視圖的內容?

根據用戶在左列中選擇的內容,我需要顯示不同的視圖。例如,在iTunes中,如果您點擊「音樂」,您會在表格中看到歌曲列表,如果您點擊「電視節目」,我會看到一個白色屏幕,上面有一些文字。

一直在努力工作這個年齡,任何指針在正確的方向將是非常方便!

回答

5

NSSplitView的右側窗格中,您可以放置​​一個製表符NSTabView。視圖的每個選項卡可以包含您想要顯示的視圖之一。然後,在您的大綱視圖的委託中,只需要在選擇特定項目時詢問選項卡視圖以顯示適當的視圖。

+0

這樣做意味着你可以通過Xcode(: – Jacob

1

如果你有一個對'將改變'的視圖的引用,你可以在一些delgate方法中添加一個新視圖作爲它的子視圖。

+0

)不知道如何做到這一點,但我肯定它可能會以某種方式(: – Jacob

2

這真的是NSViewController的工作。使用這種方式可以將每個視圖放入單獨的nib文件,然後根據需要將其交換。當您需要交換意見,你可以做這樣的事情(假設你已經在NSSplitView的右側窗格中的NSBox)

NSView *musicView = [musicViewController view]; 
[rightPaneBox setContentView:musicView]; 

編輯爲一個更全面例如:

如果你有,對於例如,音樂視圖和電視視圖。你會創建兩個新的nib文件,比如MusicView.nib和TVView.nib,並設計你的視圖。然後,您將創建兩個NSViewController,MusicViewController和TVViewController的子類。在你要調用的每一個init方法中[super initWithNib:@「MusicView.nib」bundle:nil]。

然後在你選擇新視圖的方法中,調用[musicViewController視圖]來獲得一個視圖放置到NSSplitView的右側。

+0

+1這將更好,但我不知道我我非常熟悉XCode 4能夠從頭開始做到這一點,謝謝! – Jacob

1

在嘗試過各種不起作用的東西之後,我發現了另一種解決方案。方法-replaceSubview:具有:幾乎完全正確的事情。爲了切換視圖,您只需存儲現在隱藏的視圖供以後使用。

爲了確保視圖的位置和大小正確,請在將視圖替換爲下一個視圖之前,從當前視圖複製框架。

這裏有一個代碼摘錄:

- (void)toggleView 
{ 
    NSArray* views = [splitView subviews]; 
    long count = [views count]; 

    // toggle last subview's contents (either rightmost or bottommost) 
    NSView* currentContentView = [views objectAtIndex:(count - 1)]; 

    [nextContentView setFrame:[currentContentView frame]]; 

    NSView* temp = currentContentView; 

    [splitView replaceSubview:currentContentView with:nextContentView]; 

    nextContentView = temp; 
} 

你需要調用這個首次之前初始化nextContentView。我在IB應用程序中創建的視圖中指定了一個參考插座,它位於-applicationDidFinishLaunching中。