2017-02-18 46 views
0

我正在用Swift 3製作一個小型菜單欄應用程序,我希望應用程序在單擊圖標時重新加載一些數據,但我也希望它顯示狀態菜單?MacOS statusbar app顯示菜單和運行功能點擊swift 3

下面是我的代碼示例:

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


} 

如果我註釋掉

// statusItem.menu = statusMenu 

中的doSomething()函數將運行,但我無法弄清楚如何既展示菜單並運行doSomething功能,我該怎麼做?

+0

我剛剛發現,爲避免狀態欄應用程序崩潰(如果某個函數正在運行並且狀態欄應用程序圖標上存在一個clic),將這些行添加到每個函數是有幫助的:statusItem.isEnabled = false(在開始處)和statusItem.isEnabled = true(在函數結尾處)。 – Fredo

回答

2

將菜單的代理設置爲應用程序委託(或其他對象)並實現NSMenuDelegate協議的optional func menuWillOpen(_ menu: NSMenu)

+0

真棒,謝謝,這正是我正在尋找的。 – Harold