2009-06-10 10 views

Odpowiedz

19

wyobraziłem go można dostać tablicę widzenia kontrolerów i następnie dodać obrazy:

  NSArray *tabs = tabBarController.viewControllers; 
UIViewController *tab1 = [tabs objectAtIndex:0]; 
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"]; 
UIViewController *tab2 = [tabs objectAtIndex:1]; 
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"]; 
11

UIViewController ma właściwość tabBarItem, która ma właściwość image (odziedziczoną z podklas klasy UIBarItem klasy UITabBarItem). Na przykład:

viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"]; 
+0

my tabbarcontroller jest tablicą uiviews, skąd mam wiedzieć, który jest który tabbaritem? – Atma

+0

wydaje się, że właściwość .image z UITabBarItem jest nieudokumentowana ... czy jesteś pewien, że powinniśmy użyć tej właściwości? – Johnus

2

UITabBarController nie pozwala na wiele cech, jak kolorowe obrazy dla przedmiotów pasku kart , czcionki dla elementów paska, a także obraz tła paska zakładek. Znalazłem sposób na obejście. kiedy jeden UITabBarController został dodany do UITabBarController (nie delegata aplikacji) przez Xib, istnieje również plik UIView dla UITabBarController (z nazwą "widok"). dodaj widoki obrazów ze swoimi obrazami do paska kart, a także elementów paska kart, etykiet i czego chcesz, tak aby znalazły się pod ramką paska kart. teraz musimy uczynić zakładkę nietoperzem niewidoczną, ale wciąż wykonalną. zredukuj wartość alfa paska zakładek o wartości UITabBarController z XIB tp 0.02 (poniżej 0,01 pasek kart nie przechwytuje akcji dotykowej). gotowe! nawet jeśli robisz to wszystko programowo ... to są bardzo trywialne ... ta podróż dookoła unika polityki jabłek, że programiści nie mogą podklasy UITabBarController. więc ... Pozdrawiam :)

1

szybko napisał następujące klasy i pokazywanie/ukrywanie widoków zakładki z UITabBarController pracował jak magia:

TabBarDesigner.h

#import <Foundation/Foundation.h> 
@interface TabBarDesigner : NSObject 
{ 

} 

+(void) setTabBarController:(UITabBarController *)tabBarController 
         items:(NSArray *)tabBarItems 
      viewControllers:(NSArray *)viewControllers; 

+(void) removeItemsInRange:(NSRange) range; 

@end 

TabBarDesigner.m

#import "TabBarDesigner.h" 

static NSArray *_tabBarItems = NULL; 
static NSArray *_viewControllers = NULL; 
static UITabBarController *_tabBarController = NULL; 

@implementation TabBarDesigner 

+(void) setTabBarController:(UITabBarController *)tabBarController 
         items:(NSArray *)tabBarItems 
      viewControllers:(NSArray *)viewControllers 
{ 
    if (tabBarItems && viewControllers && tabBarController) 
    { 
     if ([tabBarItems count] == [viewControllers count]) 
     { 
      [_tabBarItems release]; 
      [_viewControllers release]; 
      _tabBarItems = [tabBarItems copy]; 
      _viewControllers = [viewControllers copy]; 
      _tabBarController = tabBarController; 
     } 
    } 
} 

+(void) removeItemsInRange:(NSRange) range 
{ 
    if (_tabBarController) 
    { 
     if (range.location < ([_tabBarItems count] - 1)) 
     { 
      if ((range.length + range.location) < [_tabBarItems count]) 
      { 
       NSMutableArray *tabBarItems = [_tabBarItems mutableCopy]; 
       [tabBarItems removeObjectsInRange:range]; 
       NSMutableArray *viewControllers = [_viewControllers mutableCopy]; 
       [viewControllers removeObjectsInRange:range]; 
       [_tabBarController setViewControllers:viewControllers]; 
       NSUInteger i; 
       for (i = 0; i< [viewControllers count]; i++) 
       { 
        UIViewController *vC = [viewControllers objectAtIndex:i]; 
        vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image]; 
        vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title]; 
        vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag]; 
       } 

       [tabBarItems release]; 
       [viewControllers release]; 

      } 


     } 
    } 
} 


@end 

Przykład użycia tej klasy: W urządzeniu MyAppDelegate.m

#import "TabBarDesigner.h" 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [TabBarDesigner setTabBarController:_tabBarController 
            items:[_tabBarController.tabBar items] 
         viewControllers:[_tabBarController viewControllers]]; 
    // remove the first 3 tabs 
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,3)]; 
    // show all tabs 
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,0)]; 
    // continue with your code 
} 

Pozdrawiam!

Powiązane problemy