2013-07-20 21 views
2

我正在編程創建一個NSMenuNSMenuItem。當應用程序的窗口是活動的,NSMenuItem啓用:當窗口失去焦點時,爲什麼這個NSMenuItem被禁用?

Enabled NSMenuItem

然而,一旦窗口失去焦點的菜單項將被禁用:

Disabled NSMenuItem

下面是我正在創建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

在應用程序委託中實現與動作選擇器名稱相同的方法,並確保在響應器鏈中的其他任何地方沒有其他方法@ @am1r。 –

相關問題