2016-08-10 2 views
0

Я отправляю push-уведомление от Amazon SNS в приложение ios в swift ver. 3. При поступлении push-уведомления приложение переключается на второй элемент панели вкладок на моем устройстве в соответствии с this SO-нить. MyGlobalVariables - это структура, обновленная в AppDelegate.swift и прочитанная в диспетчере представлений.Обновить текстовую метку в панели управления viewbar

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 
    } 
} 

В SecondViewController.swift текст обновления в viewWillAppear() и все в порядке.

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

Если новый толчок уведомление с другим названием отправляется в то время как я нахожусь в этой вкладке я хотел бы текст метки будет обновляться без перехода в сторону и назад.

Я попытался обновить текстовую метку, добавив ее в AppDelegate.swift.

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

И имеют эту функцию в SecondViewController.swift

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

Но я все равно должны перейти от вкладки и обратно, что текст обновлен, который viewWillAppear() берет на себя.

ответ

1

Проблема заключается в том, что let sVC = SecondViewController() создает новый экземплярSecondViewController, а не ссылку на существующий. Вместо этого вы должны получить ссылку, используя viewControllers свойство tabBarController:

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

Вы можете вызвать метод updateLabel.

+0

Спасибо, работает! :-) Добавлен Xcode? для просмотраКонтроллеры, т.е. viewControllers? [1]. – kometen

Смежные вопросы