2013-04-29 7 views
5

La domanda di seguito è simile alla mia.È possibile personalizzare il badge UITabBarItem?

How to use a custom UIImage as an UITabBarItem Badge?

E 'possibile utilizzare un'immagine di sfondo invece di disegnare io stesso? Penso che vada bene visto che la mia app userà solo un badgeValore a 1 cifra.

Se non è realmente possibile, voglio sapere se possiamo cambiare il colore del badge. Le risposte nella domanda di seguito non sono di grande aiuto.

Is it possible to change UITabBarItem badge color

risposta

1

bene ... cambiare lo sfondo del badge integrato non sembra possibile a me. Ma ciò che è possibile invece, è il seguente:

Sottoclasse TabBarController, crea una vista personalizzata disposta in un NIB, aggiungila alla gerarchia di visualizzazione nella posizione nella barra delle schede, dove vuoi che sia.

Nella visualizzazione personalizzata è possibile impostare un'immagine come sfondo e un'etichetta su quello sfondo, che visualizzerà il valore numerico che è possibile modificare in base al codice.

Quindi è necessario determinare la posizione orizzontale e verticale della vista personalizzata in cui si desidera posizionare la vista all'interno della barra delle schede.

Spero che questo aiuti un po '. Sebastian

+0

Grazie per questa idea. Ci proverò. Ho una domanda di follow-up però. La personalizzazione di questo badge è accettabile se questa app verrà inviata all'AppStore? –

+0

Siete i benvenuti ... per favore sii così gentile e accetta la risposta se sei soddisfatto. Beh .... questo non è un problema perché non è necessario utilizzare il badge fornito da Apple se non ti piace. Ti metti nei guai solo se provi a modificare le classi private fornite da Apple. – sesc360

8

Questa è la soluzione migliore. Aggiungi questa estensione nell'ambito del file e puoi personalizzare i badge come preferisci. Basta chiamare lo self.tabBarController!.setBadges([1,0,2]) in uno qualsiasi dei tuoi controller di visualizzazione radice.

Per essere chiari è per una barra delle schede con tre elementi, con i valori del badge che vanno da sinistra a destra.

Se si desidera aggiungere le immagini invece basta cambiare il metodo di addBadge

extension UITabBarController { 
    func setBadges(badgeValues:[Int]){ 

     var labelExistsForIndex = [Bool]() 

     for value in badgeValues { 
      labelExistsForIndex.append(false) 
     } 

     for view in self.tabBar.subviews { 
      if view.isKindOfClass(PGTabBadge) { 
       let badgeView = view as! PGTabBadge 
       let index = badgeView.tag 

       if badgeValues[index]==0 { 
        badgeView.removeFromSuperview() 
       } 

       labelExistsForIndex[index]=true 
       badgeView.text = String(badgeValues[index]) 

      } 
     } 

     for var i=0;i<labelExistsForIndex.count;i++ { 
      if labelExistsForIndex[i] == false { 
       if badgeValues[i] > 0 { 
        addBadge(i, value: badgeValues[i], color:UIColor(red: 4/255, green: 110/255, blue: 188/255, alpha: 1), font: UIFont(name: "Helvetica-Light", size: 11)!) 
       } 
      } 
     } 


    } 

    func addBadge(index:Int,value:Int, color:UIColor, font:UIFont){ 

     let itemPosition = CGFloat(index+1) 
     let itemWidth:CGFloat = tabBar.frame.width/CGFloat(tabBar.items!.count) 

     let bgColor = color 

     let xOffset:CGFloat = 12 
     let yOffset:CGFloat = -9 

     var badgeView = PGTabBadge() 
     badgeView.frame.size=CGSizeMake(17, 17) 
     badgeView.center=CGPointMake((itemWidth * itemPosition)-(itemWidth/2)+xOffset, 20+yOffset) 
     badgeView.layer.cornerRadius=badgeView.bounds.width/2 
     badgeView.clipsToBounds=true 
     badgeView.textColor=UIColor.whiteColor() 
     badgeView.textAlignment = .Center 
     badgeView.font = font 
     badgeView.text = String(value) 
     badgeView.backgroundColor = bgColor 
     badgeView.tag=index 
     tabBar.addSubview(badgeView) 

    } 
} 

class PGTabBadge: UILabel { 

} 
+0

Questo App Store è sicuro? –

+0

Assolutamente, la barra delle schede è solo una vista, quindi aggiungere subviews ad esso è totalmente legittimo. – TimWhiting

1

È possibile utilizzare una soluzione più robusta @UITabbarItem-CustomBadge.

Demo

enter image description here

Semplice a due riga di codice può farti andare

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    //supplying the animation parameter 
    [UITabBarItem setDefaultAnimationProvider:[[DefaultTabbarBadgeAnimation alloc] init]]; 
    [UITabBarItem setDefaultConfigurationProvider:[[DefaultSystemLikeBadgeConfiguration alloc] init]]; 

    //rest of your code goes following... 

    return YES; 
} 
+0

per favore lasciate un commento nel commento se qualcuno lascerà un -1 –

+0

dal suo repository github di mio, dovrei aggiungere 6 interi file di codice? stai bene con quello? @Zoleas –

Problemi correlati