2011-02-26 56 views
8

我有一個稱爲歷史的NSMenuItem,它位於NSMenu調用的菜單中。當我的程序啓動時,歷史記錄沒有子菜單,因此它被禁用。然後在某個時候,我需要一個歷史的子菜單,所以我創建它,使其成爲歷史的子菜單。一個箭頭出現在歷史旁邊,告訴我子菜單在那裏。但歷史仍然殘廢。我試過setEnabled但不起作用。請幫忙。這裏我的代碼:NSMenuItem未啓用?

這是當我創建我的菜單和歷史,你可以看到一個NSMenuItem菜單。

menu = [[NSMenu alloc] initWithTitle:@"Menu"]; 
[[menu addItemWithTitle:@"History" action:nil keyEquivalent:@""] setTarget:self]; 
[[menu addItemWithTitle:@"Settings" action:@selector(loadSettings:) keyEquivalent:@""] setTarget:self]; 
[[menu addItemWithTitle:@"Quit" action:@selector(terminateApp:) keyEquivalent:@""] setTarget:self]; 

此時,歷史記錄被禁用(變灰)。 然後在程序的某個地方,我需要有對歷史如此的子菜單:

 if (historyMenu == nil) { 
     historyMenu = [[NSMenu alloc] initWithTitle:@"Lyrics history"]; 
     [menu setSubmenu:historyMenu forItem:[menu itemWithTitle:@"History"]]; 
    } 

我現在看到的歷史旁邊的箭頭,但它仍然是灰色的。

請大家幫忙,我一直試圖弄清楚最近2小時的情況。謝謝。

回答

8

您正在設置目標,但是沒有任何操作。儘量不要設置目標。這可能會使其始終處於啓用狀態,在這種情況下,您可能必須手動啓用或禁用菜單項。

Here is the documentation關於如何啓用菜單項。

+0

謝謝你做了,但是如果我不設置操作方法怎麼辦?事實上,我甚至不需要設定目標,我不知道爲什麼我在那裏。無論如何,我會嘗試你所說的,謝謝你的幫助。 – user635064 2011-02-26 01:49:01

2

我不得不重寫validateMenuItem方法return true

override func validateMenuItem(menuItem: NSMenuItem) -> Bool { 
    return true 
} 

它沒有實際使用的驗證方法,直到我設定的目標進行自我雖然喜歡你

menu.addItemWithTitle("An Item", action: #selector(itemPressed), keyEquivalent: "")?.target = self 
+0

感謝這爲我工作。 – adev 2017-07-26 22:19:52