【问题标题】:Swift: How can I update NSMenuItem while it is active (visible)?Swift:如何在 NSMenuItem 处于活动状态(可见)时更新它?
【发布时间】:2015-01-05 19:35:32
【问题描述】:

我创建了一个简单的计时器,用于更新 NSMenuItem 中的计数器。

func timerUpdate(){
    dispatch_async(dispatch_get_main_queue()){

        // calculating time
        let timeLeft = self.lxTimeLeft() // returns a double of remaining seconds
        let hoursLeft = Int(timeLeft/3600)
        let minLeft = Int(timeLeft/60) - (hoursLeft*60)
        let secLeft = Int(timeLeft) - (hoursLeft*3600) - (minLeft*60)

        let hoursLeftStr = String(format:"%02d", hoursLeft)
        let minLeftStr = String(format:"%02d", minLeft)
        let secLeftStr = String(format:"%02d", secLeft)

        println("timeLeft \(hoursLeftStr):\(minLeftStr):\(secLeftStr)")
        self.menuActiveFor.title = "\(self.activatedFor) \(hoursLeftStr):\(minLeftStr):\(secLeftStr)h"

        self.statusMenu.update() // not working
    }
}

基本上它可以工作,但是当我打开 NSMenu 时,它不会刷新 NSMenuItem (UI)。我找到了 Objective-C (How to update NSMenu while it's open?) 的解决方案,但遗憾的是,我无法使用 Swift 进行调整。

【问题讨论】:

标签: swift nsmenu nsmenuitem nsevent


【解决方案1】:

当您的菜单显示时,您需要阅读有关NSRunLoop 的文档,您的任何线程都无法控制。您需要告诉操作系统您想参与。

【讨论】:

  • 谢谢!添加NSRunLoop.currentRunLoop().addTimer(yourTimer, forMode: NSRunLoopCommonModes) 解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多