当用户在标签栏上选择一个项目时,我喜欢有一个自定义选择的图像,默认情况下,它选择为蓝色,但想要改为绿色。像下面的任何想法?有没有办法为UITabBarItem使用自定义选定的图像?
alt text http://www.freeimagehosting.net/uploads/11a2137011.png
当用户在标签栏上选择一个项目时,我喜欢有一个自定义选择的图像,默认情况下,它选择为蓝色,但想要改为绿色。像下面的任何想法?有没有办法为UITabBarItem使用自定义选定的图像?
alt text http://www.freeimagehosting.net/uploads/11a2137011.png
刚刚找到我的解决方案。基本上,我子类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
这不是正式的SDK支持。您可能能够在运行时探测并调整标签的视图,但是您可能会拒绝Apple。
编辑:为了完整起见,我应该提到您的其他选择是推出自己的UITabBar。
当调用UITabBarController-delegate-methods时,只需添加一些自定义视图(使用insertSubview:atIndex :)即可。
例子:
– (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[tabBarController.tabBar insertSubview:someView atIndex:someIndex];
}
你可以试着改变自己someIndex
,直到你有你想要的结果。
这是好事,因为它很容易实现,它不使用任何私有方法,因此不会对应用程序没有问题评论。 –
对于iOS5的向上,你可以这样做:
rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor];
设置所有图像的色调颜色。我只想要一个tabbar。我会怎么做? –
在AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
return YES;
}
这会给你一个红色,改变你想whiteColor,blueColor等一个颜色。
在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"]];
我希望这会帮助你的。
这个效果很好,除非所选图像在选择标签前没有设置(对于我来说第一个标签最初仍然是蓝色)。然而,在我的UITabBarController中通过viewDidLoad中的self.viewControllers迭代了这个技巧。 – Dustin
我也面临与达斯汀相同的问题。请让我知道我们如何显示选择或未选择的图像,而无需手动选择选项卡。 –
我不知道,但你可以尝试这一行代码。 : - [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]]; –
使用故事板时,您可以简单地选择TabBarController的TabBar,然后更改Identity Inspector中的图像色调。这应该也适用于XIB。
在我的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"]];
}
}
嗨达斯汀。在我手动选择所需的UITabBarItem之前,UITabBarItem上的图像未设置。如果你解决了这个问题,那就给我一些提示。如果可能的话,请给我提供代码。 –
什么是customHighlightedImage?你在CustomTabBarItem类中放了什么? –
只是在CustomTabBarItem的外观上添加了更多细节 – Frank
请问未选取图片的方法是什么? – Tiago