2010-08-11 5 views

Antwort

11

Habe gerade meine Lösung gefunden. Grundsätzlich subclassed ich UITabItem und setzen Sie diese in der Navigation-Controller:

-(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;    
} 

Hier ist, was die CustomTabBarItem Klasse wie folgt aussieht:

@interface CustomTabBarItem : UITabBarItem 
{ 
    UIImage *customHighlightedImage; 
} 

@property (nonatomic, retain) UIImage *customHighlightedImage; 

@end 

Umsetzung:

#import "CustomTabBarItem.h 

@implementation CustomTabBarItem 

@synthesize customHighlightedImage; 

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

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

@end 
+0

Was ist customHighlightedImage? Was haben Sie in die CustomTabBarItem-Klasse eingegeben? –

+0

hat gerade weitere Details hinzugefügt, wie CustomTabBarItem aussieht – Frank

+0

Was wäre die Methode für das nicht ausgewählte Bild bitte? – Tiago

2

Dies ist im SDK nicht offiziell unterstützt. Möglicherweise können Sie die Ansichten der Registerkarte zur Laufzeit überprüfen und anpassen, aber Sie riskieren eine Ablehnung von Apple.

Bearbeiten: Der Vollständigkeit halber sollte ich erwähnen, dass Ihre andere Option ist, Ihre eigene UITabBar zu rollen.

2

Fügen Sie einfach einige benutzerdefinierte Ansichten hinzu (mit insertSubview: atIndex :), wenn die UITabBarController-Delegate-Methoden aufgerufen werden.

Beispiel:

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

können Sie versuchen someIndex sich zu ändern, bis Sie das gewünschte Ergebnis haben.

+0

das ist gut, weil es einfach zu implementieren und es keine private Methode verwenden, daher wird keine Probleme auf app Rezension. –

1

Für iOS5 und nach oben, Sie kann dies tun:

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

Das eingestellt Farbtonfarbe aller Abbildung. Ich möchte nur eine Tableiste. Wie würde ich das tun? –

1

Ich glaube, Sie können dies jetzt tun mit:

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

'setFinishedSelectedImage: withFinishedUnselectedImage:' ist eine Methode von 'UITabBarItem', nicht' UITabBar'. – azdev

+0

@azdev Prost hat gerade meinen Fehler veröffentlicht. – Popeye

0

In AppDelegate.m

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

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

return YES; 

} 

Dies gibt Ihnen eine rote Farbe, die Farbe mit dem man whiteColor, Bluecolor usw. wünscht .

6

in iOS 6 I das ausgewählte Bild wie tabbatitem ändern -

in Tabbar Controller Delegatmethode

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

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

durch diese können Sie Ihr Bild ändern.

Oder Sie können direkt in Ihrem View-Controller init (oder ViewWillAppear) -Methode, wie

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

Ich hoffe, das Ihnen helfen wird.

+1

Dies funktioniert hervorragend, außer das ausgewählte Bild wird nicht eingestellt, bis die Registerkarte ausgewählt ist (für mich ist die erste Registerkarte zunächst noch blau getönt). Iterieren durch Self.viewControllers in ViewDidLoad in meinem UITabBarController hat aber den Trick. – Dustin

+0

Ich habe auch dasselbe Problem wie Dustin. Bitte lassen Sie mich wissen, wie wir ausgewählte oder nicht ausgewählte Bilder anzeigen können, ohne den Tab manuell auszuwählen. –

+0

Ich bin mir nicht sicher, aber Sie können diese Codezeile versuchen. : - [tabBar setSelectedItem: [tabBar.items objectAtIndex: 0]]; –

1

Bei der Verwendung von Storyboards können Sie einfach die TabBar Ihres TabBarControllers auswählen und dann den Bildfarbton im Identity Inspector ändern. Dies sollte auch mit XIBs funktionieren.

Look here for an image describing the todos

0

In meinem UITabBarController des viewDidLoad:, basierend auf Rizzu Antwort:

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

Hallo Dustin. Mein Bild auf UITabBarItem wird nicht festgelegt, bis ich das erforderliche UITabBarItem manuell auswähle. Wenn Sie dieses Problem gelöst haben, geben Sie mir einen Hinweis dafür. Wenn möglich, gib mir bitte einen Code. –