2013-04-29 13 views
5

Poniższe pytanie jest podobne do mojego.Czy można dostosować znacznik UITabBarItem?

How to use a custom UIImage as an UITabBarItem Badge?

Czy można użyć obrazu tła zamiast rysunek to sam? Myślę, że to dobrze, ponieważ moja aplikacja użyje tylko 1-cyfrowej wartości identyfikatora.

Jeśli nie jest to naprawdę możliwe, chcę wiedzieć, czy możemy zamiast tego zmienić kolor plakietki. Odpowiedzi na poniższe pytanie nie pomagają.

Is it possible to change UITabBarItem badge color

Odpowiedz

1

dobrze ... zmieniając tło wbudowanej karty identyfikacyjnej nie wydaje się możliwe, aby mnie. Ale to, co jest możliwe, jest następujące:

Podklasuj TabBarController, utwórz niestandardowy widok w NIB, dodaj go do hierarchii widoku w miejscu na pasku kart, tam, gdzie chcesz, aby był.

W widoku niestandardowym można ustawić obraz jako tło i etykietę na górze tego tła, która wyświetli wartość liczbową, którą następnie można zmienić za pomocą kodu.

Następnie należy ustalić poziome i pionowe położenie niestandardowego widoku, w którym chcesz umieścić swój widok na pasku kart.

Mam nadzieję, że to trochę pomoże. Sebastian

+0

Dziękuję za ten pomysł. Spróbuję tego. Mam jednak pytanie uzupełniające. Czy to dostosowanie znaczka jest w porządku, jeśli ta aplikacja zostanie przesłana do sklepu AppStore? –

+0

Nie ma za co ... proszę, bądź uprzejmy i przyjmij odpowiedź, jeśli jesteś zadowolony. Cóż ... nie stanowi to problemu, ponieważ nie ma potrzeby używania plakietki dostarczonej przez jabłko, jeśli się jej nie podoba. Masz problemy tylko wtedy, gdy spróbujesz zmodyfikować prywatne lekcje dostarczane przez Apple. – sesc360

8

To jest twój najlepszy zakład. Dodaj to rozszerzenie w zasięgu pliku i możesz dostosować odznaki, jak chcesz. Wystarczy zadzwonić pod numer self.tabBarController!.setBadges([1,0,2]) do dowolnego kontrolera widoku root.

Aby było jasne, że jest to pasek zakładek z trzema elementami, z wartościami od lewej do prawej.

Jeśli chcesz dodać obrazy, zamiast po prostu zmienić metodę 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

Czy to jest App Store bezpieczne? –

+0

Absolutnie pasek kart jest po prostu widokiem, więc dodanie do niego subviews jest całkowicie uzasadnione. – TimWhiting

1

Można użyć bardziej niezawodne rozwiązanie @UITabbarItem-CustomBadge.

Demo

enter image description here

Proste dwa linia kodu może Ci będzie

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

proszę zostawić powód w komentarzu, jeśli ktoś opuściłby -1 –

+0

przy okazji swojego własnego repozytorium github, czy powinienem dodać pełne 6 plików kodu? dobrze się z tym czujesz ? @Zoleas –

Powiązane problemy