我有一個應用程序,其佈局與iTunes類似。主窗口是一個NSSplitView。動態更改NSSplitView中視圖的內容?
根據用戶在左列中選擇的內容,我需要顯示不同的視圖。例如,在iTunes中,如果您點擊「音樂」,您會在表格中看到歌曲列表,如果您點擊「電視節目」,我會看到一個白色屏幕,上面有一些文字。
一直在努力工作這個年齡,任何指針在正確的方向將是非常方便!
我有一個應用程序,其佈局與iTunes類似。主窗口是一個NSSplitView。動態更改NSSplitView中視圖的內容?
根據用戶在左列中選擇的內容,我需要顯示不同的視圖。例如,在iTunes中,如果您點擊「音樂」,您會在表格中看到歌曲列表,如果您點擊「電視節目」,我會看到一個白色屏幕,上面有一些文字。
一直在努力工作這個年齡,任何指針在正確的方向將是非常方便!
在NSSplitView
的右側窗格中,您可以放置一個製表符NSTabView
。視圖的每個選項卡可以包含您想要顯示的視圖之一。然後,在您的大綱視圖的委託中,只需要在選擇特定項目時詢問選項卡視圖以顯示適當的視圖。
這真的是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的右側。
+1這將更好,但我不知道我我非常熟悉XCode 4能夠從頭開始做到這一點,謝謝! – Jacob
在嘗試過各種不起作用的東西之後,我發現了另一種解決方案。方法-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中。
這樣做意味着你可以通過Xcode(: – Jacob