【问题标题】:NSStatusItem in NSStatusBar, action selector method not respondingNSStatusBar 中的 NSStatusItem,动作选择器方法没有响应
【发布时间】:2017-05-16 12:15:59
【问题描述】:

首先我声明状态项:

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

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

【问题讨论】:

    标签: swift macos window nsstatusitem nsstatusbar


    【解决方案1】:

    将按钮的目标设置为自身。我假设您已将代码从 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
    }
    

    【讨论】:

    • 您是否介意解释一下,如果未设置目标,为什么会在 AppDelegate 中查找该方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2021-11-04
    相关资源
    最近更新 更多