5

首先我声明状态项:

var status_item: NSStatusItem?

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

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:))
}

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

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

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

4

1 回答 1

10

将按钮的目标设置为自身。我假设您已将代码从 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
}
于 2017-10-21T17:05:45.177 回答