AppDelegate.swift
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var menu: NSMenu! // Storyboardのメニューバーと接続しておく
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
var isSelectable: Bool = true
func applicationDidFinishLaunching(_ aNotification: Notification) {
statusItem.menu = menu
let selectItem menu.item(withTag: 0) // 指定タグの項目と接続してみた
selectItem?.target = self
selectItem?.action = #selector(AppDelegate.select(_:))
let quitItem menu.item(withTag: 1)
quitItem?.target = self
quitItem?.action = #selector(AppDelegate.quit(_:))
}
@objc func select(_ sender: NSMenuItem) {
// do something
}
@objc func quit(_ sender: Any) {
NSApp.terminate(self)
}
}
extension AppDelegate: NSMenuItemValidation {
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
if menuItem.action == #selector(select(_:)) {
return isSelectable // このフラグに基づき項目の選択可否が決まる
}
}
}
NSMenuItemValidation
のvalidateMenuItem
を使ってNSMenuItemの選択可否を動的に管理することができる.