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 に答える