2016-05-30 19 views
6

Sto tentando di modificare il badge dell'elemento della barra delle schede ma non ci sono riusciti. Ho capito che il controller della barra delle schede è responsabile del controller della barra delle schede.perché il badge dell'elemento della barra delle schede non viene modificato

Tuttavia, alcuni contenuti nella scheda barra stessa può essere gestito dal controller della vista, come il distintivo

nel mio codice ho provato questa prospettiva ha fatto carico

self.tabBarItem.badgeValue = "3" 

ma nulla appare nella distintivo

e poi ho provato:

self.tabBarController?.tabBarItem.badgeValue = "3" 

che didn Funziona meglio, beh, so perché il secondo codice non ha funzionato, equivale a cambiare il titolo di un controller di navigazione usando il controller di navigazione e non l'elemento di navigazione. ma non so il motivo per cui il primo codice non ha funzionato

questo è il hiechy della mia app, e lo faccio nel TeamsTableViewController che è il primo controller della vista nella scheda squadre

enter image description here

+0

è questo un processo in background? –

+0

@Sherin no .... – sarah

+0

hai provato dispatch_async (dispatch_get_main_queue() per l'aggiornamento dell'interfaccia utente? –

risposta

0

Prova questa

var cart: UITabBarItem = super.tabBarController.viewControllers[yourIndex].tabBarItem() 
cart.badgeValue = "3" 
4

nello scenario, è il controller di navigazione che controlla la tabBarItem non il TableViewController, perché ogni TabBarController ha una serie di viewControllers, e ognuno di questi viewControllers è associato a tabBarItem. Nel tuo caso, il tabBarController ha due viewControllers, che sono:

  1. Il controller di navigazione squadra
  2. Il giocatore View Controller

Così il controller della vista di navigazione squadra è il controller della vista che i titolari l'elemento della barra delle linguette.

Facendo questo dovrebbe risolvere il problema

self.navigationController?.tabBarItem.badgeValue = "3" 
1

So che questa domanda è abbastanza vecchio, ma senza risposta. Come afferma William, il tuo controller di navigazione è quello che ha il controllo sul TabBarItem. Quindi, per accedervi, puoi sottoclassi il tuo UINavigationController e rendere TabBarItem una proprietà di quella classe. Quindi è possibile accedere a TabBarItem tramite tale proprietà. Per esempio:

@interface MyCustomNavController : UINavigationController 
@property(weak, nonatomic)IBOutlet UITabBarItem *theTabBarItem; 
@end 

e dal vostro accesso TableController con il seguente:

MyCustomNavController* navController=(MyCustomNavController*)self.navigationController; 
[email protected]"3";