0

我正在使用 Swift 3 制作一个小型菜单栏应用程序,我希望应用程序在单击图标时重新加载一些数据,但我也希望它显示 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")
    }


}

如果我注释掉

// statusItem.menu = statusMenu 

doSomething() 函数将运行,但我不知道如何同时显示菜单和运行 doSomething 函数,我该怎么做?

4

1 回答 1

3

将菜单的委托设置为应用程序委托(或另一个对象)并实现optional func menuWillOpen(_ menu: NSMenu)协议NSMenuDelegate

于 2017-02-18T10:28:58.497 回答