2010-08-11 16 views

Respuesta

11

Acabo de encontrar mi solución. Básicamente, una subclase UITabItem y puse esto en el controlador de navegación:

-(void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"Events" image:[UIImage imageNamed:@"tabIcon.png"] tag:0]; 
    tabItem.customHighlightedImage=[UIImage imageNamed:@"tabIconSelected.png"]; 
    self.tabBarItem = tabItem; 
    [tabItem release]; 
    tabItem=nil;    
} 

Esto es lo que se ve la clase CustomTabBarItem como:

@interface CustomTabBarItem : UITabBarItem 
{ 
    UIImage *customHighlightedImage; 
} 

@property (nonatomic, retain) UIImage *customHighlightedImage; 

@end 

aplicación:

#import "CustomTabBarItem.h 

@implementation CustomTabBarItem 

@synthesize customHighlightedImage; 

- (void)dealloc { 
    [customHighlightedImage release]; 
    customHighlightedImage=nil; 
    [super dealloc]; 
} 

-(UIImage *)selectedImage { 
    return self.customHighlightedImage; 
} 

@end 
+0

¿qué es customHighlightedImage? ¿Qué pusiste en la clase CustomTabBarItem? –

+0

acaba de agregar más detalles sobre cómo se ve CustomTabBarItem – Frank

+0

¿cuál sería el método para la imagen no seleccionada, por favor? – Tiago

2

esto no está soportado oficialmente en el SDK. Es posible que pueda sondear y ajustar las vistas de la pestaña en tiempo de ejecución, pero corre el riesgo de ser rechazado por Apple.

Editar: Para completar, debo mencionar que su otra opción es rodar su propia UITabBar.

2

Simplemente agregue algunas vistas personalizadas (utilizando insertSubview: atIndex :) cuando se invocan los UITabBarController-delegate-methods.

Ejemplo:

– (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    [tabBarController.tabBar insertSubview:someView atIndex:someIndex]; 
} 

puede intentar cambiar someIndex a sí mismo hasta que usted tiene el resultado que desea.

+0

esto es bueno, porque es fácil de implementar y no utiliza ningún método privado, por lo tanto, no tendrá problemas en la aplicación revisión. –

1

Para IOS5 y hacia arriba, se puede hacer esto:

rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor]; 
+0

Eso establece el color del tinte de todas las imágenes. Solo quiero una pestaña. ¿Cómo lo haría? –

1

Creo que ahora se puede hacer esto con:

[[[[self tabBar] items] objectAtIndex:0] setFinishedSelectedImage:nil withFinishedUnselectedImage:nil]; 
+0

'setFinishedSelectedImage: withFinishedUnselectedImage:' es un método de 'UITabBarItem', no' UITabBar'. – azdev

+0

@azdev vítores acaba de lanzar mi error. – Popeye

0

En AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions { 

[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]]; 

return YES; 

} 

Esto le dará un color rojo, cambiar el color con el que desea whitecolor, bluecolor etc. .

6

en iOS 6 tengo cambiar la imagen tabbatitem seleccionado como -

en el método delegado controlador de barra de pestañas

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

a través de esto usted puede cambiar su imagen.

O puede utilizar directamente en su controladores de vista método init (o viewWillAppear), al igual que

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 

espero que esto te ayudaré.

+1

Esto funciona muy bien, excepto que la imagen seleccionada no se configura hasta que se selecciona la pestaña (para mí, la primera pestaña todavía está teñida de azul inicialmente). Iterando a través de self.viewControllers en viewDidLoad en mi UITabBarController hizo el truco sin embargo. – Dustin

+0

También estoy enfrentando el mismo problema que Dustin. Indíqueme cómo podemos mostrar la imagen seleccionada o no seleccionada sin seleccionar la pestaña manualmente. –

+0

No estoy seguro pero puede probar esta línea de código. : - [tabBar setSelectedItem: [tabBar.items objectAtIndex: 0]]; –

0

En mi UITabBarController de viewDidLoad:, basado en la respuesta de Rizzu:

for (int i = 0; i < [self.viewControllers count]; i++) 
{ 
    UIViewController* viewController = [self.viewControllers objectAtIndex:i]; 

    if(i == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"btn_list_all_hover.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"btn_list_all.png"]]; 
    } 
    else if(i == 1) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"btn_settings_hover.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"btn_settings.png"]]; 
    } 
} 
+0

Hola Dustin. Mi imagen en UITabBarItem no está configurada hasta que selecciono manualmente el UITabBarItem requerido. Si resolviste este problema, entonces dame una pista para esto. Si es posible, por favor dame el código. –

Cuestiones relacionadas