有没有办法为UITabBarItem使用自定义选定的图像?

时间:2010-08-11 19:04:30

标签: iphone uitabbar uitabbaritem

当用户选择标签栏上的项目时,我喜欢自定义所选图像,默认情况下,它选择为蓝色,但希望改为使用绿色。像下面的任何想法?

alt text http://www.freeimagehosting.net/uploads/11a2137011.png

9 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"]];

我希望这会帮助你。

答案 2 :(得分:2)

SDK中未正式支持此功能。您可以在运行时探测和调整选项卡的视图,但您可能会被Apple拒绝。

编辑:为了完整起见,我应该提一下你的另一个选择就是推出自己的UITabBar。

答案 3 :(得分:2)

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

示例:

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

您可以尝试自己更改someIndex,直到获得所需的结果。

答案 4 :(得分:1)

对于iOS5及更高版本,您可以这样做:

rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor];

答案 5 :(得分:1)

我相信你现在可以用:

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

答案 6 :(得分:1)

使用故事板时,您只需选择TabBarController的TabBar,然后在Identity Inspector中更改Image Tint。这也适用于XIB。

Look here for an image describing the todos

答案 7 :(得分:0)

在AppDelegate.m中

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

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

return YES;

}

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

答案 8 :(得分: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"]];
    }
}