Est-il possible d'utiliser une image sélectionnée personnalisée pour UITabBarItem?
-
27-09-2019 - |
La solution
Juste trouvé ma solution. Au fond, je UITabItem et mis en sous-classé ce dans le contrôleur de navigation:
-(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;
}
Voici ce que les regards de la classe CustomTabBarItem comme:
@interface CustomTabBarItem : UITabBarItem
{
UIImage *customHighlightedImage;
}
@property (nonatomic, retain) UIImage *customHighlightedImage;
@end
Mise en oeuvre:
#import "CustomTabBarItem.h
@implementation CustomTabBarItem
@synthesize customHighlightedImage;
- (void)dealloc {
[customHighlightedImage release];
customHighlightedImage=nil;
[super dealloc];
}
-(UIImage *)selectedImage {
return self.customHighlightedImage;
}
@end
Autres conseils
Dans iOS 6 je changer l'image sélectionnée comme tabbatitem -
dans le contrôleur TabBar méthode déléguée
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([tabBarController selectedIndex] == 0)
{
[viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
}
}
à cela, vous pouvez changer votre image.
Ou vous pouvez utiliser directement dans vos contrôleurs de vue méthode init (ou viewWillAppear), comme
[viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
J'espère que cela va vous aider.
Il suffit d'ajouter quelques vues personnalisées (en utilisant insertSubview. AtIndex :) lorsque les méthodes UITabBarController-délégué sont appelés
Exemple:
– (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[tabBarController.tabBar insertSubview:someView atIndex:someIndex];
}
Vous pouvez essayer de changer someIndex
vous jusqu'à ce que vous avez le résultat que vous voulez.
Ce n'est pas officiellement pris en charge dans le SDK. Vous pourrez peut-être sonder et régler lors de l'exécution des vues de l'onglet, mais vous risquez un rejet d'Apple.
Edit:. Pour être complet, je dois mentionner que votre autre option est de rouler votre propre UITabBar
Pour iOS5 et vers le haut, vous pouvez simplement faire ceci:
rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor];
Je crois que vous pouvez le faire avec:
[[[[self tabBar] items] objectAtIndex:0] setFinishedSelectedImage:nil withFinishedUnselectedImage:nil];
Lors de l'utilisation storyboards, vous pouvez sélectionner simplement votre TabBar de TabBarController puis changer l'image Tint dans l'inspecteur d'identité. Cela devrait également travailler avec XIBs.
Dans AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
return YES;
}
Cela vous donnera une couleur rouge, changer la couleur avec celui que vous souhaitez whiteColor, etc .. blueColor
Dans mon viewDidLoad:
de UITabBarController, basée sur la réponse 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"]];
}
}