2016-07-12 12 views
0

Ich möchte einen Timer (Minuten und Sekunden) in verschiedenen Viewcontrollern meiner Anwendung anzeigen. Wie kann ich das machen ?Wie kann man in Swift einen Timer in verschiedenen UIViewControllern anzeigen?

Ich dachte, den Timer mit einem Singleton zu verwenden, aber wie aktualisiert das richtige Etikett alle Sekunden?

+1

Haben Sie Ihre Timer-Aktualisierungsroutine auszusenden Benachrichtigungen. Jeder viewController, der an der Anzeige dieses Timers interessiert ist, kann auf die Benachrichtigungen warten und sein Label aktualisieren. – vacawama

+1

Ich habe diese Methode verwendet, es funktioniert perfekt, danke! – Will

Antwort

0

Ja, können Sie Singletons

Dieser Code Call-Methode updateLabel: jede Sekunde

Obj-c

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

Swift

var myTimer: NSTimer? = nil 
override func viewDidAppear(animated: Bool) {  
    myTimer = NSTimer(timeInterval: 1.0, target: self, selector: #selector(MyClass.updateAmazing), 
    userInfo: nil, repeats: true) 
} 

func updateAmazing() { 
    //update 
} 

In Singletons verwenden Sie Timer starten soll, Auf Controller starten Sie die Aktualisierung von Label und Wert von Singleton.

WICHTIG

vergessen Nicht Timer ungültig zu machen.

override func viewDidDisappear(animated: Bool) { 
    super.viewDidDisappear(animated) 
    myTimer.invalidate() 
} 
0

Der einfachste Weg - nutzen NSNotificationCenter von Singleton Oder Sie können Array mit Delegierten und Call-Methode erstellen, wenn Timer-Update war, alle Viewcontrollers, die in diesem Array erhalten Nachrichten