【发布时间】:2017-02-18 09:28:08
【问题描述】:
我正在使用 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 函数,我该怎么做?
【问题讨论】:
-
我刚刚发现,如果一个函数正在运行并且单击状态栏应用程序图标,为了避免状态栏应用程序崩溃,将这些行添加到每个函数是有帮助的:statusItem.isEnabled = false (在开始时)和 statusItem.isEnabled = true(在函数结束时)。
标签: swift cocoa nsmenu nsstatusbar