2013-07-20 4 views
2

프로그래밍 방식으로 NSMenuItem을 사용하여 NSMenu을 만듭니다. 응용 프로그램의 윈도우가 활성화되면 NSMenuItem을 사용할 수 있습니다 :왜이 NSMenuItem이 포커스를 잃었을 때 비활성화되어 있습니까?

Enabled NSMenuItem

그러나, 곧 창은 메뉴 항목이 무효가 포커스를 잃었을 같이

여기

Disabled NSMenuItem

이 방법 I NSMenu을 작성 중입니다.

- (void)_quit 
{ 
    [[NSApplication sharedApplication] terminate:nil]; 
} 

- (NSMenu *)_setupMenu 
{ 
    NSMenu *statusMenu = [[NSMenu alloc] initWithTitle:@"Demo"]; 
    NSMenuItem *quit = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(_quit) keyEquivalent:@""]; 

    [statusMenu addItem:quit]; 

    return statusMenu; 
} 

이 문제가 발생 했습니까? 응용 프로그램의 포커스 여부에 관계없이이를 활성화하는 방법은 무엇입니까?

답변

2

응답 항목 체인을 기반으로 메뉴 항목이 활성화되어 있기 때문입니다.

귀하의 경우에는 terminate: 선택기를 사용할 수 있습니다.
응답자 체인의 일부인 NSApplication 클래스에서 선언되었으므로 항목은 항상 활성화됩니다. 여기에

NSMenuItem *quit = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@""]; 

더 : Cocoa Event Handling Guide

+1

그리고 응용 프로그램의 대표는 '체인 NSApp'는이 메뉴 항목에 대한 자신의 코드를 실행해야하는 경우 직후입니다. –

+0

@JoshCaswell :이 코드를 직접 작성하여 대리인을 수정해야합니까? –

+1

앱 델리게이트에서 액션 셀렉터와 같은 이름을 가진 메소드를 구현하고 리스폰 더 체인 @ aam1r에 그 이름을 가진 다른 메소드가 없는지 확인하십시오. –