2010-04-25 1 views
0

Как реагировать на элементы меню, которые вызывается с помощью мыши или вызывается с помощью клавиатуры, например: CMD + Q?Используется mainmenu при отображении листа

[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]; 

ответ

1

Я предполагаю, что вы используете метод NSApp -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:. Если это так, то вы уже должны иметь возможность выполнять команды меню. Этот метод управляет модулем листа только для данного окна (в отличие от модального для всего приложения). Однако, если вы также вызываете NSApp's -runModalForWindow:, тогда он будет модальным для всего приложения. Поэтому, предполагая, что вы этого не называете, тогда другие окна и команды меню должны работать нормально, когда лист отображается.

Однако пункт меню «Выход» является одним из исключений. Это не позволит вам выйти из-за того, что для окна есть модальный сеанс, который, по его мнению, должен быть рассмотрен до того, как приложение может выйти. Если это то, что вы действительно пытаетесь сделать, одно из возможных решений заключается в подклассе NSApplication и переопределении его метода -terminate:, чтобы закрыть ваш лист (если он открыт). Во-первых, вам нужно сделать подкласс NSApplication, и ваше приложение использует его, установив его как в «MainMenu.xib», так и как Principal Class в вашем «Info.plist»). Затем добавьте что-то вроде этого в ваш подкласс:

- (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]; 
}