Existe uma maneira de usar uma imagem selecionada personalizada para o uitabbaritem?
-
27-09-2019 - |
Solução
Acabei de encontrar minha solução. Basicamente, subclassei o Uitabitem e defina isso no controlador de navegação:
-(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;
}
Aqui está como se parece a classe CustomTabBariTem:
@interface CustomTabBarItem : UITabBarItem
{
UIImage *customHighlightedImage;
}
@property (nonatomic, retain) UIImage *customHighlightedImage;
@end
implementação:
#import "CustomTabBarItem.h
@implementation CustomTabBarItem
@synthesize customHighlightedImage;
- (void)dealloc {
[customHighlightedImage release];
customHighlightedImage=nil;
[super dealloc];
}
-(UIImage *)selectedImage {
return self.customHighlightedImage;
}
@end
Outras dicas
No iOS 6, mudei a imagem selecionada do tabbatitem como -
no método delegado do controlador Tabbar
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([tabBarController selectedIndex] == 0)
{
[viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
}
}
Com isso, você pode mudar sua imagem.
Ou você pode usar diretamente no método de visualização controladores init (ou viewwillappear), como
[viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
Espero que isso te ajude.
Basta adicionar algumas visualizações personalizadas (usando InsertsubView: ATIndex :) Quando os métodos uitabBarController-Delegate são chamados.
Exemplo:
– (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[tabBarController.tabBar insertSubview:someView atIndex:someIndex];
}
Você pode tentar mudar someIndex
você mesmo até ter o resultado que deseja.
Isso não é oficialmente apoiado no SDK. Você pode investigar e ajustar as visualizações da guia em tempo de execução, mas corre o risco de rejeição da Apple.
EDIT: Para completar, devo mencionar que sua outra opção é rolar seu próprio UITABBAR.
Para iOS5 e para cima, você pode fazer isso:
rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor];
Eu acredito que você pode agora fazer isso com:
[[[[self tabBar] items] objectAtIndex:0] setFinishedSelectedImage:nil withFinishedUnselectedImage:nil];
Ao usar storyboards, você pode simplesmente selecionar o TabBar do seu TabBarController e alterar a tonalidade da imagem no inspetor de identidade. Isso também deve funcionar com o XIBS.
Em appdelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
return YES;
}
Isso lhe dará uma cor vermelha, mude a cor com a que você deseja Whitecolor, Bluecolor etc.
No meu uitabbarcontroller viewDidLoad:
, com base na resposta 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"]];
}
}