macos - Swift:点击刷新菜单栏

标签 macos swift statusbar

我正在为 Mac OS X 制作一个状态栏应用程序,但是我只希望它在我单击状态栏项目时刷新。

这是我的代码:

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet var menu: NSMenu!


    var statusItem: NSStatusItem!;

    @IBAction func quit(sender: AnyObject) {
        NSApplication.sharedApplication().terminate(nil)
    }

    func Refresh(){
        NSLog("Refresh")
    }

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)
        statusItem.title = "Battery Infomation"
        statusItem.menu = self.menu
        statusItem.highlightMode = true
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }


}

如果有人可以帮助我做到这一点,我们将不胜感激。

最佳答案

您正在寻找的是 validateMenuItem:。这是一个检查菜单是否应该启用或禁用的地方。因此,每次都会在菜单出现之前调用它。您可以使用它来更新标题以反射(reflect)电池状态。

override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
    if(menuItem.action == Selector("batteryStatus:")) {
        NSLog("refresh!");
        let now = NSDate()
        menuItem.title = String(format:"%f", now.timeIntervalSince1970);
        return true;
    }
    return true;
}

@IBAction func batteryStatus(sender: NSObject) {

}

关于macos - Swift:点击刷新菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27214936/

相关文章:

macos - 登录 : login: Could not determine audit condition

objective-c - 禁用 NSOutlineView 的滚动动画

ios - 如何在 swift 中使用 FieldValue.serverTimestamp() 将时间戳分配给 FireStore

objective-c - iOS7 无法隐藏状态栏

c++ - 如何动态更改 CMFCRibbonLabel 的文本

php - 如何在 Mac 10.6.7 上安装 pecl 或 pecl 扩展?

macos - 如何设置键盘快捷键跳转到行首/行尾?

swift - 如何创建看起来像用 Swift 铅笔绘制的 View 边框?

ios - 返回 App SpriteKit 后按播放

xcode - 模态解雇不考虑状态栏(新的 iOS 6 问题?)