2017-02-18 10 views
0

私はSwift 3の小さなメニューバーアプリを作っています。アイコンをクリックするとアプリがデータを読み込んでくれますが、 statusMenu?私はdoSomethingの()関数が実行されますMacOSのステータスバーアプリのshow menuとclick on swift 3の機能を実行する

// statusItem.menu = statusMenu 

をコメントアウトが、私は両方表示する方法を見つけ出すことができない場合

// AppDelegate.swift 

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var statusMenu: NSMenu! 

    @IBAction func quitClicked(_ sender: NSMenuItem) { 
     NSApplication.shared().terminate(self) 
    } 

    let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength) 

    func applicationDidFinishLaunching(_ aNotification: Notification) { 
     if let button = statusItem.button { 
      button.title = "App" 
      button.action = #selector(AppDelegate.doSomething(sender:)) 
      statusItem.menu = statusMenu 
     } 
    } 

    func applicationWillTerminate(_ aNotification: Notification) { 
    } 

    func doSomething(sender: AnyObject?) { 
     NSLog("do something") 
    } 


} 

:以下

は、私のコードのサンプルですメニューを開き、doSomething関数を実行します。どうしたらいいですか?

+0

私は、関数が実行されているときにステータスバーアプリケーションがクラッシュするのを避けるために、ステータスバーのアプリアイコンに1つのclicがあることを知りました。これらの行を各関数に追加すると便利です:statusItem.isEnabled = false statusItem.isEnabled = true(関数の最後にあります)。 – Fredo

答えて

2

メニューのデリゲートをアプリケーションデリゲート(または別のオブジェクト)に設定し、プロトコルのoptional func menuWillOpen(_ menu: NSMenu)を実装します。

+0

素晴らしい、ありがとう、これはまさに私が探していたものだった。 – Harold

関連する問題