Я создал простой таймер, который обновляет счетчик в NSMenuItem.Swift: Как я могу обновить 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.
Спасибо! Добавление 'NSRunLoop.currentRunLoop(). AddTimer (yourTimer, forMode: NSRunLoopCommonModes)' решил мою проблему. – ixany