2010-01-18 34 views
8

試圖瞭解菜單處理的基本原理。我的測試應用程序菜單欄有3個菜單 - 即「TestApp」,「文件」和「幫助」。我發現我可以完全刪除這些菜單,簡單地通過調用說:禁用/啓用應用程序菜單項

NSMenu* rootMenu = [NSApp mainMenu]; 
[rootMenu removeItemAtIndex:2]; 

不過,我永遠只能想暫時禁用(灰色出來)。請問有沒有同樣簡單的方法可以做到這一點?

回答

7

我可能會誤解你的問題,但似乎你想能夠使系統菜單欄中顯示的菜單的實際標題變灰(如灰色的「文件」菜單)。我不知道,如果它甚至有可能,但肯定違背了Apple Human Interface Guidelines

菜單的標題顯示沒有模糊的 即使所有菜單的命令是 不可用(變灰)在同一時間。 用戶應該始終能夠查看 菜單的內容,不管它們是否當前可用 。

因此,問題的真正解決方案是能夠在應用程序處於特定狀態時使特定菜單中的所有菜單項變灰。要做到這一點,implement the NSUserInterfaceValidations protocol。它只需要執行- (BOOL)validateUserInterfaceItem:方法。通常,在實現此方法時,只需檢查要驗證的用戶界面項目的選擇器,如果應該啓用它,則返回YES;如果不應該(否則會使菜單項變灰)返回NO。

+0

是的,你理解正確,CJ。我*試圖自己調暗「文件」和/或「編輯」菜單 - 而不是它們各自的項目 - 並沒有意識到蘋果的人機界面指南中的那個關鍵段落指出我不應該做就這樣。 我在我的代碼中包含了 - (BOOL)validateUserInterfaceItem:方法,它完美地工作。這種簡單的解決方案。太感謝了 :-) – Bender 2010-01-19 01:23:40