2011-12-29 7 views
1

赤いXを押すとウィンドウが消えますが、設計通りにステータスバーの項目はステータスバーに残ります。ステータスバーのメニュー選択からアプリケーションウィンドウを開く

ステータスバーの項目をクリックすると、メニューが開きます。選択肢の1つは、アプリケーションを再度開くことです。アプリケーションコントローラでアクションを呼び出すことはできますが、アプリケーションのウィンドウを開くために何をすべきか分かりません。私はそれを読む

[window makeKeyOrderFront:self]; 

「ウィンドウ」はコンパイラによって認識されません。私は客観的なc /ココアに慣れていないので、私は明らかな何かが欠けていると確信しています。ここでwindow

答えて

1

はあなたのアプリケーションからNSWindow*オブジェクトを格納するために使用される変数である - デフォルトのXcodeのアプリデリゲートのテンプレートも作成されます - それは、あなたはまだ、まだ一般的にアプリのデリゲートに(自分のクラスのいずれかでそれを保持していることを前提としていwindowの特性)。ただし、これはアプリケーションの種類によって異なります。アプリケーションがドキュメントベースの場合は、すべて自動である必要があります(openUntitledDocumentAndDisplay:error:を呼び出して新しいドキュメントを作成できます)。そうでなければ、ウィンドウを管理するのはあなたのコードに依存します。通常は、アプリケーションの代理人が行います。

+0

[OK]を、私は、アプリケーションの代理人のウィンドウ変数を参照してください。私は、これらのことがどういった方法でつながっているのか、アプリケーションが実際に委任していることを理解していないと思います。だから、私はそれにアクセスすることができるように私は、ウィンドウのオブジェクトへのポインタをアプリケーションコントローラに渡す必要があるように聞こえる。私はそれをどうやって行うのか分からない。デリゲートにコントローラのインスタンスがあるように見えません。 – JonF

+1

アプリケーションデリゲートにウィンドウプロパティを作成する標準のXcodeテンプレートを使用していると仮定すると、いつでも '[[NSApp delegate] window]'を使うことができます。 –

0

私は最近この問題に対処しました。すべての3つの事柄は、AppDelegateで処理されます。

//レスポンスがアプリケーションメニューの選択を再開する

- (IBAction)showMainWindow:(id)sender 
{ 
    [self applicationShouldHandleReopen:nil hasVisibleWindows:YES]; 
    [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; 
} 

ユーザーが閉じた後にメインウィンドウに戻りたい場合は、//これを必要とそれ

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [_window setReleasedWhenClosed:NO]; 
} 

//メインウィンドウを閉じた後にMainWindowを再び表示させる場合は、これが必要です

- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag{ 
    [_window setIsVisible:YES]; 
    return YES; 
} 
関連する問題