0

メイン ウィンドウを表示するメニュー項目を追加しようとしています。ウィンドウが最小化または閉じられていない場合 (黄色 - および赤色の x ボタン) に有効になりますが、最小化されている場合、メニュー項目はグレー表示されます。もちろん、それは役に立たずばかげています。:)

別のメニュー項目であるファイル/ページ設定... は、同じようにグレー表示されません (最小化/閉じるとき)。タイトルを除いて、このメニュー項目と私が作成したメニュー項目の間に IB の違いは見つかりませんでした。どちらも First Responder セレクター (ページ設定用の runPageLayout: と私の場合は showWindow:) に接続されており、両方ともキーボード ショートカットがあり、両方が有効になっています。

同様に、タイトルを除いて、親メニュー項目は同じです。

ユーザーが赤い x または黄色の - ボタンを押したときに、この [メイン ウィンドウを表示] メニュー項目が使用可能であることを確認するにはどうすればよいですか?

編集: 親メニュー項目の Auto Enables Items のチェックを外して、メニュー項目をグレーアウトしないようにしました。

これにより、アプリケーションの標準 NSDocument クラスのこのメソッドが呼び出されました。

- (IBAction)clickMinimizeButton:(id)sender {
    NSWindow *ww=[[NSApplication sharedApplication] mainWindow];
    NSLog(@"%@",ww);
}

そして ww は有効なオブジェクトです。

問題は、ウィンドウが最小化/閉じられているときにメソッド呼び出されないため、ウィンドウを復元できないことです。

ウィンドウが最小化/閉じられたときにこのメソッドを呼び出すにはどうすればよいですか? 最小化または閉じるクリックの反対を単純に行いたい。

アプリにはウィンドウが 1 つしかなく、ドック アイコンをもう一度クリックするとウィンドウが表示されますが、Apple ではまったく同じことを行うためにメニュー項目が必要です。

メニュー項目を、私が作成したカスタム アプリケーション メソッドに接続する必要があるように思われます (たとえば、すべてのウィンドウを復元するアプリケーション メソッドはありません)。私はココアタッチと同じようにココアを経験しました。

編集 2: 上記から、アプリケーション デリゲートでメソッドを作成し、それをメニュー項目に接続しました。これにより、最小化されている場合でも呼び出されるメソッドが取得されますが、メイン ウィンドウを復元するための正しいコードがわかりません。もちろん、この必死の試みは、最小化されたウィンドウではなく、既にアクティブなアプリのみをアクティブにします。

NSApplication *theapp=[NSApplication sharedApplication];
[theapp activateIgnoringOtherApps:YES];

ということで、今はこれだけです。デフォルトのアプリケーションで標準の「Bring All to Front」メニュー項目をエミュレートする方法は? Apple の標準的なウィンドウ付き Mac アプリを見てみましょう。

編集 3: 標準の Cocoa アプリケーションを作成しましたが、ウィンドウを最小化すると、ウィンドウ メニューのすべてのメニュー項目がグレー表示されます。ただし、デフォルトの NSDocument はこれらの下に自動的に追加され、グレー表示されません。私はそのような解決策に満足しています。

何らかの理由で、[ウィンドウ] メニューに NSDocument が自動的に表示されません。Info.plists は同一です (もちろん、別の名前の NSDocument クラスを指していることは別として)。

どうすれば

a) プログラムでドキュメントをそのメニューに追加し、

b) 標準アプリケーションの場合と同様に、[ウィンドウ] メニューに自動的に追加するか、または

c) 「破損した」ウィンドウ メニュー (その場合) を、期待どおりに動作する標準アプリのウィンドウ メニューに置き換えますか?

4

2 に答える 2

0

メソッドの名前を別の名前に変更してみてください。 showWindow:NSWindowControllerですでに宣言されているため、衝突が発生する可能性があります。また、メニュー項目に応答するはずのオブジェクトが解放されていないことを確認してください。

于 2012-10-18T08:39:11.870 に答える
0

showWindow を実装しましたか?

- (void)showWindow {
    if (!self.window) {
        [NSBundle loadNibNamed:@"MainWin" owner:self];
    }

    [self.window makeKeyAndOrderFront:self];
}

psウィンドウを閉じてwindowはいけません( -> )autoreleasedBehaviorRelease When Closed

于 2012-10-18T10:05:31.863 に答える