2015-11-19 3 views
0

У меня есть небольшая проблема. Я хочу, чтобы установить знак на вкладке после получения толчка, но я не могу понять, как я могу изменить значение жетона (С моей AppDelegate)Swift - Set TabBarBadge после получения нажатия

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
    { 
     print("didReceiveRemoteNotification") 
     //can't find or access the tabBarItem... 

    } 

Я пробовал разные вещи. Однажды я получаю нуль во время разворачивания, а иногда я создаю новый TabBarController, и я могу изменить значение значка ... Но проблема в том, что это не таббар, который показан. (Первый равен нулю, а второй является «новой» один)

Вот некоторые попытки:

let tabBarC = self.storyboard?.instantiateViewControllerWithIdentifier("TC") 
     let items = tabBarC?.tabBarController?.tabBar.items 
     let tab = items![3] 
     tab.badgeValue = "999" 


let tabBarController: UITabBarController = storyboard!.instantiateViewControllerWithIdentifier("TC") as! UITabBarController 

     let tabArray = tabBarController.tabBar.items as NSArray! 
     let tabItem = tabArray.objectAtIndex(3) as! UITabBarItem 
     tabItem.badgeValue = "!" 
     print(tabItem.title) 

Ах, и мой TabBarController не мой RootViewController

У вас есть какие-либо предложения есть я могу исправить это?

Спасибо :)

ответ

0

Ладно, я нашел «решение» ... Я не нашел другое решение, которое работает для меня ...

Я устанавливаю публичную переменную BadgeValue. Каждый раз, когда я получаю push, я меняю его значение.

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
    { 
     BadgeValue = "!" 
    } 

В каждом VC на ViewDidAppear я делаю это:

BadgeValue = "" //Just in the Tab where the BadgeValue is shown 
let tabArray = tabBarController?.tabBar.items as NSArray! 
     let tabItem = tabArray.objectAtIndex(3) as! UITabBarItem 
     if(BadgeValue != ""){ 
      tabItem.badgeValue = BadgeValue 
     } else { 
      tabBarItem.badgeValue = .None 
     } 

Может быть, это поможет вам, если у вас есть такая же проблема ... (я знаю, что это решение не хорошо, но это работает. Не идеально, но он работает)

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