NSStatusBar中的NSStatusItem,动作选择器方法未响应

Hex*_*ons 4 macos window nsstatusitem nsstatusbar swift

首先,我声明状态项:

var status_item: NSStatusItem?
Run Code Online (Sandbox Code Playgroud)

然后,我有一个关闭寡妇并添加状态项的功能:

self.view.window?.orderOut(self)
//self.view.window?.close()

self.status_item = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength)
if let status_button = self.status_item?.button {
    status_button.image = NSImage(named: "StatusBarButtonImage")
    status_button.action = #selector(statusBar(sender:))
}
Run Code Online (Sandbox Code Playgroud)

这是我的动作选择器方法,该方法应删除状态项并再次显示窗口。按下状态栏中的状态栏项时未调用它:

func statusBar(sender: AnyObject) {
    print("status bar clicked")
    self.status_item = nil
    self.view.window?.orderFront(nil)
}
Run Code Online (Sandbox Code Playgroud)

有人知道我在做什么错吗?

laa*_*som 6

将按钮的目标设置为self。我假设您已将代码从AppDelegate移至单独的类。如果是这样,则该按钮仍从AppDelegate接收消息。

所以...

if let status_button = self.status_item?.button {
    status_button.image = NSImage(named: "StatusBarButtonImage")
    status_button.action = #selector(statusBar(sender:))
    status_button.target = self //critical line
}
Run Code Online (Sandbox Code Playgroud)

  • 如果未设置目标,您是否介意解释为什么会在 AppDelegate 中查找该方法? (2认同)