2009-06-10 10 views

Respuesta

19

lo he descubierto que puede obtener el conjunto de controladores de vista y luego añadir las imágenes:

  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 tiene una propiedad tabBarItem que tiene una image propiedad (heredado de la clase UIBarItemUITabBarItem subclases). Por ejemplo:

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

my tabbarcontroller es una serie de uiviews ¿cómo sé cuál es qué tabbaritem? – Atma

+0

Parece que la propiedad .image de UITabBarItem no está documentada ... ¿está seguro de que debemos usar esa propiedad? – Johnus

2

la UITabBarController no permite muchos rasgos, como imágenes de colores para los elementos barra de pestañas , fuentes para los elementos de barra, así como imagen de fondo para la barra de pestañas. he encontrado una forma de evitarlo cuando se agrega un UITabBarController a un UITabBarController (no el delegado de la aplicación) a través del xib, también hay un archivo UIView para el UITabBarController (con el nombre 'ver'). agregue vistas de imagen con sus imágenes para la Barra de pestañas, así como los Elementos de la barra de pestañas, las etiquetas y lo que desee, de modo que queden justo debajo del marco de la Barra de pestañas. ahora tenemos que hacer que el tabulador sea invisible pero aún viable. reduzca el valor alfa para la barra de pestañas del UITabBarController de xib tp 0.02 (por debajo de 0.01 la barra de pestañas no captura las acciones táctiles). ¡estás listo! incluso cuando se hace todo esto programáticamente ... estos son muy triviales ... este viaje de ida y vuelta evita la política de la manzana que los desarrolladores no pueden subclasificar UITabBarController. así ... Saludos :)

1

yo escribimos rápidamente la siguiente clase y mostrar/ocultar vistas de fichas de UITabBarController trabajado como 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 

Una muestra de cómo usar esta clase: en su 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 
} 

¡Salud!

Cuestiones relacionadas