我正在用Swift編寫一個應用程序到macOS Sierra。如何灰化NSMenuItem?
我有一個NSMenuItem,我想變灰(所以用戶甚至不能選擇它)。
我已經在故事板中將其父菜單AutoEnableItems設置爲FALSE,並通過登錄我的代碼驗證它仍然是false。
當我將NSMenuItem的isEnabled屬性設置爲false時,它的功能是當我選擇該菜單項時,與菜單項關聯的操作不被調用(這很好),但菜單仍然可選。
我希望它是灰色的,顯然不能被用戶選擇。
我正在用Swift編寫一個應用程序到macOS Sierra。如何灰化NSMenuItem?
我有一個NSMenuItem,我想變灰(所以用戶甚至不能選擇它)。
我已經在故事板中將其父菜單AutoEnableItems設置爲FALSE,並通過登錄我的代碼驗證它仍然是false。
當我將NSMenuItem的isEnabled屬性設置爲false時,它的功能是當我選擇該菜單項時,與菜單項關聯的操作不被調用(這很好),但菜單仍然可選。
我希望它是灰色的,顯然不能被用戶選擇。
根據文檔,你在做什麼聽起來是正確的。
但是,我這樣做的方式是在我的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
然而,正如我所說,這篇文章似乎表明你所嘗試的是正確的,所以誰知道呢?我可以肯定地說我的方式有效。
你想讓它變成灰色。來自哪裏?視圖控制器?一個窗口控制器? AppDelegate的?單身? –
@ElTomato - 它來自我的AppDelegate,在通知回調的上下文中(NotificationCenter的觀察者):我想根據觸發通知的新值啓用/禁用菜單 – BearOverflow
這不是我正在尋找的答案對於。誰在發佈通知以及如何? –