2016-08-10 1 views
0

Ich sende eine Push-Benachrichtigung von Amazon SNS auf eine iOS-App in schneller ver. 3. Wenn die Push-Benachrichtigung eintrifft, schaltet die App auf das zweite Registerkartenelement auf meinem Gerät gemäß this SO-Thread um. MyGlobalVariables ist eine Struktur, die in AppDelegate.swift aktualisiert und im Viewcontroller gelesen wird.Update-Text-Label in der Tab-Leiste ViewController

AppDelegate.swift

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    if let aps = userInfo["aps"] as? NSDictionary { 
     if let alert = aps["alert"] as? NSDictionary { 
      if let title = alert["title"] as? String { 
       MyGlobalVariables.pushTitle = title 
      } 
      if let body = alert["body"] as? String { 
       MyGlobalVariables.pushBody = body 
      } 
     } 
    } 
    if self.window!.rootViewController as? UITabBarController != nil { 
     let tabbarController = self.window!.rootViewController as! UITabBarController 
     tabbarController.selectedIndex = 1 
    } 
} 

In SecondViewController.swift ist der Text Update in viewWillAppear() und alles ist in Ordnung.

override func viewWillAppear(_ animated: Bool) { 
    pushTitleLabel?.text = MyGlobalVariables.pushTitle 
} 

Wenn eine neue Push-Benachrichtigung mit einem anderen Titel gesendet wird, während ich in dieser Registerkarte bin ich die Beschriftung weg, ohne die Navigation aktualisiert werden mag und zurück.

Ich habe versucht, die Textbeschriftung zu aktualisieren, indem Sie diese zu AppDelegate.swift hinzufügen.

let sVC = SecondViewController() 
if let title = alert["title"] as? String { 
    MyGlobalVariables.pushTitle = title 
    sVC.updateLabel(t: title) 
} 

Und haben diese Funktion in SecondViewController.swift

func updateLabel(t: String) { 
    self.pushTitleLabel?.text = t 
} 

Aber ich habe noch von dem Registerkarte navigieren weg und wieder zurück der Text aktualisiert zu haben, die viewWillAppear() kümmert.

Antwort

1

Das Problem ist, dass let sVC = SecondViewController() eine neue Instanz der SecondViewController erstellt, keine Bezugnahme auf die vorhandene. Sie sollten stattdessen einen Verweis mit der viewControllers Eigenschaft des TabBarController erhalten:

let sVC = tabbarController.viewControllers[1] as! SecondViewController 

Sie dann die updateLabel Methode aufrufen können.

+0

Danke, funktioniert! :-) Xcode hinzugefügt? ViewControllers, dh. viewControllers? [1]. – kometen

Verwandte Themen