2010-04-25 5 views
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]; 

답변

1

난 당신이 NSApp의 -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: 방법을 사용하는 가정합니다. 그렇다면 이미 메뉴 명령을 수행 할 수 있어야합니다. 이 메서드는 지정된 창에 대해서만 시트 모달을 실행합니다 (전체 응용 프로그램의 모달과 반대). 그러나 NSApp의 -runModalForWindow:으로 전화를 걸면 전체 앱의 모달이됩니다. 그래서 당신이 그것을 부르지 않는다고 가정하면, 시트가 보여 질 때 다른 창과 메뉴 명령이 잘 작동해야합니다.

그러나 '종료'메뉴 항목은 예외입니다. 창을 활성화하는 모달 세션이 있기 때문에 종료 할 수 없습니다. 응용 프로그램을 종료하기 전에 처리해야한다고 가정합니다. 이것이 실제로하려는 경우, 가능한 해결책은 NSApplication을 서브 클래스 화하고 그 -terminate: 메소드를 우선 적용하여 시트를 닫습니다 (열려있는 경우). 먼저, 서브 클래스를 NSApplication으로 만들고 앱에 'MainMenu.xib'와 'Info.plist'의 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]; 
}