2013-04-29 12 views
5

Die folgende Frage ist ähnlich wie meine.Ist es möglich, UITabBarItem Badge anzupassen?

How to use a custom UIImage as an UITabBarItem Badge?

Ist es möglich, ein Hintergrundbild zu verwenden, anstatt es selbst zu zeichnen? Ich denke, es ist in Ordnung, da meine App nur einen 1-stelligen badgeValue verwendet.

Wenn es nicht wirklich möglich ist, möchte ich wissen, ob wir stattdessen die Farbe des Logos ändern können. Die Antworten in der folgenden Frage helfen nicht wirklich.

Is it possible to change UITabBarItem badge color

Antwort

1

gut ... den Hintergrund der Einbau-Abzeichen Wechsel mir scheint nicht möglich. Aber was stattdessen möglich ist, ist folgendes:

Unterklassieren Sie den TabBarController, erstellen Sie eine benutzerdefinierte Ansicht in einer NIB, fügen Sie es der Ansichtshierarchie an der Position in der Registerkartenleiste, wo Sie es sein möchten.

In der benutzerdefinierten Ansicht können Sie ein Bild als Hintergrund und eine Beschriftung über diesem Hintergrund einrichten, die den Zahlenwert anzeigt, den Sie dann nach Code ändern können.

Dann müssen Sie die horizontale und vertikale Position Ihrer benutzerdefinierten Ansicht herausfinden, wo Sie Ihre Ansicht innerhalb der Registerkartenleiste platzieren möchten.

Hoffe das hilft ein wenig. Sebastian

+0

Sie für diese Idee danken. Ich werde das ausprobieren. Ich habe jedoch eine Anschlussfrage. Ist diese Badge-Anpassung in Ordnung, wenn diese App im AppStore eingereicht wird? –

+0

Sie sind herzlich willkommen ... bitte seien Sie so nett und akzeptieren Sie die Antwort, wenn Sie zufrieden sind. Nun .... das ist kein Problem, da Sie das von Apple zur Verfügung gestellte Abzeichen nicht verwenden müssen, wenn Sie es nicht mögen. Sie kommen nur in Schwierigkeiten, wenn Sie versuchen, private Klassen von Apple zu ändern. – sesc360

8

Dies ist Ihre beste Wette. Fügen Sie diese Erweiterung im Dateibereich hinzu, und Sie können die Ausweise nach Belieben anpassen. Rufen Sie einfach self.tabBarController!.setBadges([1,0,2]) in einem Ihrer root-View-Controller an.

Um klar zu sein, ist das für eine Tab-Leiste mit drei Elementen, wobei die Abzeichen Werte von links nach rechts gehen.

Wenn Sie Bilder hinzufügen möchten, anstatt nur die addBadge Methode ändern

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

Ist dieser App Store sicher? –

+0

Absolut, die Tab-Leiste ist nur eine Ansicht, so dass das Hinzufügen von Unteransichten absolut legitim ist. – TimWhiting

1

Sie können eine robustere Lösung @UITabbarItem-CustomBadge verwenden.

Demo

enter image description here

Einfache zwei Codezeile können Sie loslegen

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

Bitte hinterlassen Sie einen Grund in Kommentar, wenn jemand eine -1 –

+0

übrigens ein Github-Repository meiner eigenen verlassen, sollte ich full 6 Dateien Code hinzufügen? Bist du damit einverstanden ? @ Zoleas –

Verwandte Themen