2011-07-05 12 views
9

私はiTunesに似たレイアウトのアプリケーションを持っています。メインウィンドウはNSSplitViewです。NSSplitViewでビューの内容を動的に変更しますか?

左の列でユーザーが選択した内容に応じて、別のビューを表示する必要があります。たとえば、iTunesで「音楽」をクリックするとテーブルの曲のリストが表示されます。「テレビ番組」をクリックすると、白い画面にテキストが表示されます。

これを年齢に合わせて試してみましたが、正しい方向のポインタは非常に便利です!

答えて

5

NSSplitViewの右側のウィンドウでは、タブなしの場所にNSTabViewを置くことができます。ビューの各タブには、表示したいビューの1つを含めることができます。次に、アウトラインビューのデリゲートで、特定の項目が選択されたときに適切なビューを表示するようにタブビューに依頼します。

+0

このようにすると、Xcode(: – Jacob

1

「変更」するビューへの参照がある場合、一部の方法では新しいビューをそのサブビューとして追加できます。

+0

)の処理方法がわかりませんが、どういうわけか( – Jacob

2

これは実際にはNSViewControllerの仕事です。これを使うと、各ビューを別々のnibファイルに入れて、必要に応じてそれらを入れ替えたり入れ替えることができます。

お持ちの場合は、のために:あなたは意見を交換する必要がある場合は、あなたがこのような何かを行うことができ充実例えば

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

編集(あなたがNSSplitViewの右側のペインでNSBoxを持っていると仮定)たとえば、ミュージックビューとテレビビューです。 MusicView.nibとTVView.nibという2つの新しいnibファイルを作成し、それらのビューをデザインします。次に、NSViewController、MusicViewController、およびTVViewControllerの2つのサブクラスを作成します。それぞれのinitメソッドで、[super initWithNib:@ "MusicView.nib" bundle:nil]と呼ぶでしょう。

新しいビューを選択するメソッドでは、[musicViewControllerビュー]を呼び出して、NSSplitViewの右側に配置するビューを取得します。

+0

+1でもそれは可能ですが、これを一からやることができるようにXCode 4には十分に精通しています。ありがとう! – Jacob

1

私はうまくいかなかったことを試した後、別の解決策を見つけました。メソッド-replaceSubview:with:ほとんど正確に正しいことをします。ビューを切り替えるには、後で使用するために隠しビューを保存するだけです。

ビューの位置とサイズが正しいことを確認するには、現在のビューからフレームをコピーしてから次のビューに置き換えます。あなたが最初の時間のためにこれを呼び出す前にnextContentViewを初期化する必要があります

- (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; 
} 

は、ここでのコードの抜粋です。私は、IBで作成したビューの参照アウトレットを-applicationDidFinishLaunchingに割り当てます。

関連する問題