0

マウスでクリックされた、またはキーボードで呼び出されたメニュー項目にどのように反応しますか。例:CMD + Q?

[NSApp beginSheet:my_sheet  ...arguments... ];

/*  
The sheet is now shown and the mainmenu isn't usable.
How does one make it usable?
*/

[NSApp endSheet:my_sheet returnCode:0];
4

1 に答える 1

1

NSAppの-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:メソッドを使用していると思います。もしそうなら、あなたはすでにメニューコマンドを行うことができるはずです。このメソッドは、(アプリ全体のモーダルではなく)指定されたウィンドウに対してのみシートモーダルを実行します。ただし、NSAppも呼び出すと-runModalForWindow:、アプリ全体でモーダルになります。したがって、それを呼び出さないと仮定すると、シートが表示されているときに他のウィンドウやメニューコマンドが正常に機能するはずです。

ただし、「終了」メニュー項目は1つの例外です。ウィンドウに対してアクティブなモーダルセッションがあるため、終了できません。これは、アプリを終了する前に処理する必要があると想定しています。これが本当にやろうとしていることである場合、考えられる解決策の1つは、NSApplicationそのメソッドをサブクラス化してオーバーライドし-terminate:、最初にシートを閉じることです(シートが開いている場合)。まず、のサブクラスを作成し、「MainMenu.xib」と「Info.plist」のNSApplication両方で設定して、アプリに使用させる必要があります。Principal Class次に、次のようなものをサブクラスに追加します。

- (void)terminate:(id)sender
{
    // First close the sheet (if it's active), using whatever method
    // you have set up to do this...
    [((MyAppDelegate*)[self delegate]) closeSheet:self];

    // Now call the normal implementation
    [super terminate:sender];
}
于 2010-04-25T19:59:16.667 に答える