2017-09-01 87 views
0

我正在用Swift編寫一個應用程序到macOS Sierra。如何灰化NSMenuItem?

我有一個NSMenuItem,我想變灰(所以用戶甚至不能選擇它)。

我已經在故事板中將其父菜單AutoEnableItems設置爲FALSE,並通過登錄我的代碼驗證它仍然是false。

當我將NSMenuItem的isEnabled屬性設置爲false時,它的功能是當我選擇該菜單項時,與菜單項關聯的操作不被調用(這很好),但菜單仍然可選。

我希望它是灰色的,顯然不能被用戶選擇。

+0

你想讓它變成灰色。來自哪裏?視圖控制器?一個窗口控制器? AppDelegate的?單身? –

+0

@ElTomato - 它來自我的AppDelegate,在通知回調的上下文中(NotificationCenter的觀察者):我想根據觸發通知的新值啓用/禁用菜單 – BearOverflow

+0

這不是我正在尋找的答案對於。誰在發佈通知以及如何? –

回答

0

根據文檔,你在做什麼聽起來是正確的。

但是,我這樣做的方式是在我的AppDelegate類中實現validateMenuItem。這個方法有點煩人,因爲它被調用每個菜單項,菜單項作爲參數傳遞。所以你必須打開參數,看看它是否是你想禁用的菜單項,並返回false。

這裏有一個Objective-C例如:https://developer.apple.com/documentation/objectivec/nsobject/1518160-validatemenuitem

迅速例子可能是這樣的:

override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {  
    switch menuItem.tag { 
    case MenuItemTags.SignOut: 
     return signOutEnabled() 
    case MenuItemTags.CheckForUpdates: 
     return updatesEnabled() 
    default: 
     return true 
    } 
} 

您可能已經閱讀已經是這個,但很多血淋淋的細節在這裏:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html

然而,正如我所說,這篇文章似乎表明你所嘗試的是正確的,所以誰知道呢?我可以肯定地說我的方式有效。