2011-02-07 10 views
3

Cocoaで複数のウィンドウを操作するには?私はココアのアプリケーションを作成しました。そのアプリケーションを実行すると、デフォルトのウィンドウが自動的に表示されます。私はウィンドウにボタンを追加しました。ボタンをクリックするとIBで作成したMySecondWindowという名前の別ウィンドウが開きます。複数のWindowsでの作業Interface Builderの使用

MySecondWindowのウィンドウコントローラ(MySecondWindowController)を作成し、IBのnibにリンクしました。メインウィンドウのボタンをクリックすると、MySecondWindowControllerのインスタンスを作成し、[mySecondWindowObj window]NSApp beginSheet:メソッドを呼び出すIBActionを呼び出しています。 Modal session requires modal windowというメッセージがNSlogに届いています。 NSLog[mySecondWindowObj window]を印刷しようとすると、nullが印刷されます。

私は何をすべきか分かりません。この仕事をするために必要なことは何ですか?私は

おかげで..

+0

文書ベースのアプリケーションですか? 'MySecondWindow'は独自のnibファイルにありますか? –

+0

文書ベースのアプリケーションではありません。はい、MySecondWindowは独自のnibファイルにあります。 – EmptyStack

答えて

3
YourWindowController* sheet; 

[[NSApplication sharedApplication] beginSheet:[sheet window] 
           modalForWindow:[[NSApplication sharedApplication] mainWindow] 
           modalDelegate:nil 
           didEndSelector:nil 
            contextInfo:nil]; 

ウィンドウが正しくインスタンス化されていることを確認してください。 IBの "Visible At Launch"オプションがチェックされていないことを確認してください。

EDIT:別のnibファイルからこのウィンドウを読み込んでいることに気付きました。正しく読み込んでいることを確認してください。 ALSO

YourWindowController* sheet = [[YourWindowController alloc] initWithWindowNibName:@"NameOfNibMinusExtension"]; 

チェックをし、「ファイルの所有者」タイプは、カスタムウィンドウコントローラのクラス名に設定されていることを確認し、それがだと「窓」はペン先で画面に設定され、これを使用してください。

ファイルの所有者を右クリック(またはCmd +クリック)して、対応するウィンドウに「ウィンドウ」プロパティが接続されていることを確認します。また、もう一度、ウィンドウの "Visible on Launch"がチェックされていないことを確認してください。

1

、Controlキーを押しながらクリックして、ボタンをホールドし、MySecondWindowに上線をドラッグし...助けが必要。それは方法の完全な少しブラックボックスを与えるでしょう:makeKeyAndOrderFront:を選択してください。

ボタンをクリックすると、ボタン(NSButtonのインスタンス)がmakeKeyAndOrderFront:メッセージをウィンドウに送信します。このボタンは、NSControlのサブクラスであり、Cocoaでターゲット/アクションシステムと呼ばれるものを実装します。 Interface Builderでは、行をドラッグすると、ボタンのターゲットがMySecondWindowに設定され、アクションはmakeKeyAndOrderFront:に設定されます。 NSButtonは、クリックを受信したときにアクションメッセージをターゲットに送信するように内部的にプログラムされます。

意味がありますか?

+0

あなたの答えをありがとう。ボタンにアクションを追加できます。しかし、私は、シートを作成し、提示することに問題があります。私は質問を編集しました。 – EmptyStack