2011-07-07 14 views
1

私はMac OSプログラミングではとても新しいです。現時点では、上部にツールバー、下部に適切なビューを持つ1つのウィンドウを持つ簡単な測定アプリケーションを作成しようとしています。ツールバーのボタンをクリックすると、その下に切り替えビューが表示されます。 「接続」ボタンをクリックすると接続設定が表示され、「測定値」にはデバイスからの現在のデータが表示されます。ビューの交換 - NSWindowControllerとNSViewController

問題がある - 私は多分、他の言葉でスワップのビューを処理する方法がわからない - 私が知っている何かではなく、正確に... は、私がここに同様の議論が見つかりました:NSViewController and multiple subviews from a Nibが、を作成するために、どのように応答がありませんNSWindowControllerとそれをメインウィンドウに割り当てる方法ビューをスワップできるようにNSWindowControllerを作成する必要があると思います。私が間違っているなら、私を修正してください。

だから私は(ここではサンプルと呼ばれる)新しいプロジェクトを作成していますし、のように見えるSampleAppDelegate.hファイル、あります:から作成された一つのウィンドウのみを保持しているウィンドウのIVARは、あり

@interface SampleAppDelegate : NSObject <NSApplicationDelegate> { 
@private 
    NSWindow *window; 
} 

@property (assign) IBOutlet NSWindow *window; 

@end 

は、 MainMenu.xib(私が思う)。

したがって、SampleAppDelegateからウィンドウのNSWindowControllerを作成する必要がありますか?

は、私はちょうど私のWindowControllerサブクラスを作成する必要がありますし、機能 に - (無効)applicationDidFinishLaunching:このようなSampleAppDelegateの(NSNotification *)aNotification :

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    MyWindowController *wc = [[MyWindowController alloc] initWithWindow:self.window]; 

    [wc showWindow:self]; 
    self.myWindowController = wc; 
    [wc release]; 

} 

は、私はすべてのヒントのために非常に感謝しますよそして助けてください。

マルチン

答えて

2

ビュースワッピングを行うためのNSWindowControllerを必要はありません、NSWindowControllerのは、あなたが複数のトップレベルウィンドウを必要とするときだけで(私が思う)を使用しました。

NSViewControllerをサブビューして、それぞれのビューをペン先に配置し、ビューをウィンドウの下部に配置する必要がある場合はNSView *ビューを呼び出すことができます。あなたは通常のようにウインドウにそれを追加するだけで、setContentViewを使ってNSBoxに入れることができます:view

2つのビューには、MeasurmentsViewControllerとConnectionViewControllerを作成します。その後、MeasurementsView.nibとConnectionView.nibでビューを作成し、それらのnibを使ってView Controllerを初期化します。あなたのメインウィンドウで、次に

、あなたはそれ

NSView *connectionView = [connectionViewController view]; 
[boxAtBottomOfWindow setContentView:connectionView]; 
にConnectionViewを

NSView *measurementsView = [measurementsViewController view]; 
[boxAtBottomOfWindow setContentView:measurementsView]; 

それにMeasurementsViewを置くことをして置きたいのだ場合は、NSBoxを入れていた場合