MacOS 菜单栏中的 StatusItem 变灰并且不起作用
StatusItem in MacOS menubar is greyed out and doesn't work
我有一些 Swift 代码看起来像这样。但是,菜单项只会变灰并且不起作用。我已经为该项目的 #selector
尝试了不同的版本,但到目前为止没有任何效果。
class StatusBarController {
private var statusBar: NSStatusBar
private var statusItem: NSStatusItem
init() {
statusBar = NSStatusBar.init()
self.statusItem = statusBar.statusItem(withLength: NSStatusItem.variableLength)
self.state = FirebaseData()
self.startUpdate()
self.setupMenus()
}
func setupMenus() {
let menu = NSMenu()
menu.addItem(withTitle: "Play Pause", action: #selector(StatusBarController.onClickPlayPause), keyEquivalent: "1")
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
self.statusItem.menu = menu
}
@objc func onClickPlayPause(sender : NSMenuItem) {
if self.isRunning() {
self.pause()
} else if (self.state.intervalLeft != nil) {
self.resume()
} else {
self.startTimer(nil)
}
}
}
有人可以向我解释我做错了什么吗?谢谢!
你必须设定目标。
let playMenuItem = menu.addItem(withTitle: "Play Pause", action: #selector(onClickPlayPause), keyEquivalent: "1")
playMenuItem.target = self
Quit
项目通过 First Responder 工作。
我有一些 Swift 代码看起来像这样。但是,菜单项只会变灰并且不起作用。我已经为该项目的 #selector
尝试了不同的版本,但到目前为止没有任何效果。
class StatusBarController {
private var statusBar: NSStatusBar
private var statusItem: NSStatusItem
init() {
statusBar = NSStatusBar.init()
self.statusItem = statusBar.statusItem(withLength: NSStatusItem.variableLength)
self.state = FirebaseData()
self.startUpdate()
self.setupMenus()
}
func setupMenus() {
let menu = NSMenu()
menu.addItem(withTitle: "Play Pause", action: #selector(StatusBarController.onClickPlayPause), keyEquivalent: "1")
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
self.statusItem.menu = menu
}
@objc func onClickPlayPause(sender : NSMenuItem) {
if self.isRunning() {
self.pause()
} else if (self.state.intervalLeft != nil) {
self.resume()
} else {
self.startTimer(nil)
}
}
}
有人可以向我解释我做错了什么吗?谢谢!
你必须设定目标。
let playMenuItem = menu.addItem(withTitle: "Play Pause", action: #selector(onClickPlayPause), keyEquivalent: "1")
playMenuItem.target = self
Quit
项目通过 First Responder 工作。