iTunesに似たレイアウトのアプリケーションがあります。メインウィンドウはNSSplitViewです。
ユーザーが左側の列で選択した内容に応じて、別のビューを表示する必要があります。たとえば、iTunesで「音楽」をクリックすると、テーブルに曲のリストが表示されます。「テレビ番組」をクリックすると、テキストが表示された白い画面が表示されます。
何年もの間これを解決しようとしてきましたが、正しい方向へのポインタは非常に便利です!
iTunesに似たレイアウトのアプリケーションがあります。メインウィンドウはNSSplitViewです。
ユーザーが左側の列で選択した内容に応じて、別のビューを表示する必要があります。たとえば、iTunesで「音楽」をクリックすると、テーブルに曲のリストが表示されます。「テレビ番組」をクリックすると、テキストが表示された白い画面が表示されます。
何年もの間これを解決しようとしてきましたが、正しい方向へのポインタは非常に便利です!
の右側のペインにNSSplitView
、タブなしを配置できますNSTabView
。ビューの各タブには、表示するビューの1つを含めることができます。次に、アウトラインビューのデリゲートで、特定のアイテムが選択されたときに適切なビューを表示するようにタブビューに要求します。
「変更」されるビューへの参照がある場合は、いくつかのdelgateメソッドで、そのサブビューとして新しいビューを追加できます。
うまくいかなかったあらゆる種類のことを試した後、別の解決策を見つけました。メソッド -replaceSubview:with: は、ほぼ正確に正しいことを行います。ビューを切り替えるには、後で使用するために非表示になったビューを保存するだけです。
ビューの位置とサイズが正しいことを確認するには、現在のビューからフレームをコピーしてから、次のビューに置き換えます。
コードの抜粋を次に示します。
- (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 を初期化する必要があります。-applicationDidFinishLaunching で、IB で作成したビューから参照アウトレットを割り当てます。