选项卡项目图像和selectedImage

我有一个标签栏控制器(其基于标签栏的应用程序,所以标签栏是在MainWindow.xib)。 在这个xib中,我添加了4个标签栏项目,并设置了所有标签栏项目的图像。 由于这个原因,我面临两个问题:

1)图像是白色的,但是当我运行应用程序时,它将标签栏项目上的所有图像显示为灰色。 我怎样才能让它看起来像原来的形象。

2)我有一个选定的图像,我想添加在当前选中的标签栏项目。 我应该怎么做?

尼克代码后更新:

嘿,在iOS 5中,您将不得不在应用程序代理中编写以下代码,以便设置选项卡栏项目select和未选定的图像(该类别解决scheme仅适用于4):

if ([[[UIDevice currentDevice] systemVersion] floatValue]>4.9) { NSString *selectedImageName,*unselectedImageName; for (int counter = 0; counter < [self.tabBarController.tabBar.items count]; counter++) { if (counter==0) { selectedImageName = <someImagename>; unselectedImageName = <someImagename>; } else if (counter==1) { selectedImageName = <someImagename>; unselectedImageName = <someImagename>; } . . else { selectedImageName = <someImagename>; unselectedImageName = <someImagename>; } UIImage *selectedImage = [UIImage imageNamed:selectedImageName]; UIImage *unselectedImage = [UIImage imageNamed:unselectedImageName]; UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:counter]; if ([item respondsToSelector:@selector(setFinishedSelectedImage:withFinishedUnselectedImage:)]) { [item setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; } } } 

将此类别添加到您的项目。 它将强制标签栏项目使用您的原始图像作为禁用状态,而不是应用灰色渐变:

 @implementation UItabBarItem (CustomUnselectedImage) - (UIImage *)unselectedImage { return self.image; } @end 

这可能看起来像是使用私有API,但我已经看到这在被批准的应用上多次使用。 这实际上不是调用一个私有方法,只是重写一个。

如果您需要为选定和未select的图像指定不同的图像,最好的方法是使用UITabBarItem的tag属性和switch语句,如下所示:

 @implementation UItabBarItem (Custom) - (UIImage *)selectedImage { switch (self.tag) { case 1: return [UIImage imageNamed:@"tab-selected1.png"]; case 2: return [UIImage imageNamed:@"tab-selected2.png"]; etc... } } - (UIImage *)unselectedImage { switch (self.tag) { case 1: return [UIImage imageNamed:@"tab-unselected1.png"]; case 2: return [UIImage imageNamed:@"tab-unselected2.png"]; etc... } } @end 

然后在界面生成器中,不要打扰设置标签栏项目图像,因为他们将被忽略。 相反,设置他们的标签来匹配您在switch语句中指定的图像。

请注意,如果您的应用程序中有多个选项卡栏,并且您不希望全部以这种方式覆盖它们,则可以将这些方法定义在UITabBarItem的子类上,而不是作为类别。 然后,可以将nib文件中的标签栏项目类设置为您的自定义子类,而不是常规的UITabBarItems,只有那些将受到影响。

编辑:

请注意,从iOS 5开始,使用UIAppearance API有更好的方法。 这种技术应该仍然有效,但是谁知道现在是否有官方支持的方法,苹果公司是否会开始打击呢? 除非你确实需要iOS 4的支持,否则最好使用新的方法。

基于http://blog.theanalogguy.be/为我工作&#x3002; 添加类别UItabBarItem(CustomUnselectedImage) – 没有效果=(

* .h

 @interface CustomTabBarItem : UITabBarItem { UIImage *customHighlightedImage; UIImage *customNormalImage; } @property (nonatomic, retain) UIImage *customHighlightedImage; @property (nonatomic, retain) UIImage *customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag; @end 

和* .m

 #import "CustomTabBarItem.h" @implementation CustomTabBarItem @synthesize customHighlightedImage; @synthesize customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag{ [self initWithTitle:title image:nil tag:tag]; [self setCustomNormalImage:normalImage]; [self setCustomHighlightedImage:highlightedImage]; return self; } - (void) dealloc { [customHighlightedImage release]; customHighlightedImage=nil; [customNormalImage release]; customNormalImage=nil; [super dealloc]; } -(UIImage *) selectedImage { return self.customHighlightedImage; } -(UIImage *) unselectedImage { return self.customNormalImage; } @end 

快乐编码=] –