2010-08-11 42 views

回答

11

刚刚找到我的解决方案。基本上,我子类UITabItem和导航控制器设置这样的:

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

这里的CustomTabBarItem类的样子:

@interface CustomTabBarItem : UITabBarItem 
{ 
    UIImage *customHighlightedImage; 
} 

@property (nonatomic, retain) UIImage *customHighlightedImage; 

@end 

实现:

#import "CustomTabBarItem.h 

@implementation CustomTabBarItem 

@synthesize customHighlightedImage; 

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

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

@end 
+0

什么是customHighlightedImage?你在CustomTabBarItem类中放了什么? –

+0

只是在CustomTabBarItem的外观上添加了更多细节 – Frank

+0

请问未选取图片的方法是什么? – Tiago

2

这不是正式的SDK支持。您可能能够在运行时探测并调整标签的视图,但是您可能会拒绝Apple。

编辑:为了完整起见,我应该提到您的其他选择是推出自己的UITabBar。

2

当调用UITabBarController-delegate-methods时,只需添加一些自定义视图(使用insertSubview:atIndex :)即可。

例子:

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

你可以试着改变自己someIndex,直到你有你想要的结果。

+0

这是好事,因为它很容易实现,它不使用任何私有方法,因此不会对应用程序没有问题评论。 –

1

对于iOS5的向上,你可以这样做:

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

设置所有图像的色调颜色。我只想要一个tabbar。我会怎么做? –

1

我相信你现在可以做到这一点:

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

'setFinishedSelectedImage:withFinishedUnselectedImage:'是'UITabBarItem'的方法,而不是'UITabBar'。 – azdev

+0

@azdev干杯刚刚释放我的错误。 – Popeye

0

在AppDelegate.m

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

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

return YES; 

} 

这会给你一个红色,改变你想whiteColor,blueColor等一个颜色。

6

在iOS 6中我有改变等所选择的图像tabbatitem -

在的TabBar控制器委托方法

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

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

通过这个,您可以改变您的图像。

或者你可以在你的视图控制器的init(或viewWillAppear中)的方法直接使用,如

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

我希望这会帮助你的。

+1

这个效果很好,除非所选图像在选择标签前没有设置(对于我来说第一个标签最初仍然是蓝色)。然而,在我的UITabBarController中通过viewDidLoad中的self.viewControllers迭代了这个技巧。 – Dustin

+0

我也面临与达斯汀相同的问题。请让我知道我们如何显示选择或未选择的图像,而无需手动选择选项卡。 –

+0

我不知道,但你可以尝试这一行代码。 : - [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]]; –

0

在我的UITabBarController的viewDidLoad:,基于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

嗨达斯汀。在我手动选择所需的UITabBarItem之前,UITabBarItem上的图像未设置。如果你解决了这个问题,那就给我一些提示。如果可能的话,请给我提供代码。 –

相关问题