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 {
}
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? –
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