2011-07-16 6 views
0

私はこれが私の最初のMacアプリケーションだと言って前に説明しますが、私はしばらくの間、iOSアプリケーションを構築してきました。Mac開発でMenuBarアプリケーションのウィンドウ管理はどのように機能しますか?

私はthisを持っていることを意味するメニューバーアプリ(システムトレイアプリ)を持っています。

私はInterface Builderで作成したNSWindowを表示したいので、NSWindowから派生したクラスを作成しました。ウィンドウのデリゲートとアプリケーションデリゲートから私のクラス作られた私は、次の操作を行います。

MyClass *myClass = [[MyClass alloc] init]; 
[myClass display]; 
[myClass center]; 
[NSApp activateIgnoringOtherApps:YES]; 
[viewer makeKeyAndOrderFront:nil]; 

これは、標準のウィンドウのボタン(クローズ、最大化、最小化する)のではなく、私が定義した窓のないウィンドウを表示しているようです。

これはウィンドウを表示する正しい方法ですか?私の設計したインターフェイスを表示するようにウィンドウをどのように定義する必要がありますか?このプログラミングWindowsフォームで

は次のようになります。

Form myForm = new Form(); 
myForm.Show(); 

答えて

2

あなたはめったにあなたは、ウィンドウの動作をオーバーライドする場合を除き、NSWindowのをサブクラス化する必要はありません。より典型的な使用シナリオは、NSWindowControllerのインスタンスまたはNSWindowControllerのサブクラスを使用して、そのクラスをInterface BuilderのFile's Ownerにすることによってウィンドウを管理することです。

NSWindowController *wc = [[NSWindowController alloc] initWithWindowNibName:@"NIBNAMEHERE"]; 
[wc showWindow:nil]; 

アプリで別の方法としては、アプリのデリゲートにNSWindowのIBOutletを追加し、とアプリデリゲートに窓をロードするために、次のようになります。これが完了すると、ウィンドウの使用のインスタンスを取得するには

[NSBundle loadNibNamed:@"NIBFILENAME" owner:self]; 
[_window makeKeyAndOrderFront]; 
+0

私は本当にアプリケーションの代理人に私のウィンドウのロジックを置くしたくなかったが、応答のおかげで、オプション2は治療を働いた。私はFileOwnerをMyClassに変更し、アプリケーションデリゲートでそのインスタンスを設定し、オプション2コードを呼び出しました。それは魅力のように働いた!私が今いる唯一の問題は、発生すると思われる唯一のイベントはAwakeFromNibであり、WindowWillLoadは起動しないということです。 –

+0

窓の内容を初期化するための通常の場所であるawakeFromNibですか? –

+1

windowWillLoadはNSWindowControllerとサブクラスでのみ呼び出されるので、オプション2を使用した場合、awakeFromNib:は初期化コードに最適な場所です。 – sbooth

関連する問題