Mi chiedevo se fosse possibile aggiornare l'etichetta di testo di un timer in un widget di oggi. Ho dato un'occhiata in giro ma nulla mi ha aiutato.È possibile aggiornare un timer in un widget Today?
risposta
Sì, è possibile. Ho appena provato e funziona. Basta aggiungere la timer per le principali NSRunLoopCommonModes ciclo di esecuzione:
RunLoop.main.add(yourTimerName, forMode: .commonModes)
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet weak var strTimer: UILabel!
var timer = Timer()
func updateInfo() {
strTimer.text = Date().description
}
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateInfo), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .commonModes)
}
func widgetPerformUpdate(completionHandler: @escaping (NCUpdateResult) -> Void) {
completionHandler(.newData)
}
}
https://dl.dropboxusercontent.com/u/87285547/todayTimer.zip –
grazie per la tua risposta Devo metterlo nel mio codice poiché il mio timer è in esecuzione nel controller della vista principale e sto provando a passare quel timer dal controller della vista al controller todayview usando NSUserDefaults e ai gruppi – Nicholas
sentiti libero di aprire un'altra domanda con il tuo codice. Ti darò un'occhiata per te –
So che questa è una domanda Swift, ma ho trovato alla ricerca di codice Objective-C e così gli altri possono anche .
-(void) viewDidLoad
{
[NSTimer scheduledTimerWithTimeInterval:1 // update more than once a second to appear in sync with the system clock
target:self
selector:@selector(updateTimes:)
userInfo:nil
repeats:YES];
}
-(void) updateTimes:(NSTimer *)timer
{
// Update Widget UI as required
}
Penso che l'unico modo per farlo sia passare NSTimeInterval del controller di visualizzazione principale e creare un altro timer nel widget di oggi. Troverò un modo:] – Nicholas