选中时TabBar按钮背景更改

时间:2014-11-20 15:07:38

标签: ios tabbar uitabbaritem

我是iOS开发的新手,但经过大量搜索我的答案后,我还没有找到它。我现在正在考虑在标签栏上使用纯图像视图,即使我喜欢使用标签栏元素。我的问题是,当我选择该按钮时,我没有看到任何方法来更改标签栏按钮单元格的背景颜色。我可以改变色调(我用于按钮的图像的颜色)。是否有选择时更改背景的战争(我选择按钮时使用白色图像,因此我需要更改单元格的背景颜色),还是应该使用imageView来满足我的需求?

2 个答案:

答案 0 :(得分:0)

编辑2:我认为您可以使用 selectedImageTintColor :(已弃用)或 selectionIndicatorImage :来自UITabBar的方法来实现您的要求。


旧回复:

根据文件:https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UITabBarItem_Class/index.html#//apple_ref/occ/instp/UITabBarItem/selectedImage

有一个方便的属性selectedImage来做这些事情。

使用可以直接在init方法中设置它。 UIViewController中的示例:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
       self.title = @"my controller";
       self.tabBarItem = [[UITabBarItem alloc] initWithTitle:self.title image:[UIImage imageNamed:@"normalTabBarItem"] selectedImage:[UIImage imageNamed:@"selectedTabBarItem"]];
    }
    return self;
}

编辑:UITabBarItem没有背景颜色。所以你必须嵌入"背景颜色"直接在图像和所选图像中。

默认情况下,实际未选择和选定的图像是根据源图像中的Alpha值自动创建的。要防止系统着色,请使用UIImageRenderingModeAlwaysOriginal提供图像。

答案 1 :(得分:0)

要更改选定的标签栏项目背景,我使用以下init创建了名为TabBar的自定义类:

#import "TabBar.h"
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]

@implementation TabBar

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (!(self = [super initWithCoder:aDecoder])) return nil;

    [self setupSelectionIndicatorImage];

    return self;
}

- (void)setupSelectionIndicatorImage {
    UIView *item = self.subviews.firstObject;
    UIColor *backgroundColor = RGB(0, 117, 255);

    // Creating background image
    CGRect rect = CGRectMake(0, 0, item.bounds.size.width, item.bounds.size.height);
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); // 0 == device main screen scale
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [backgroundColor CGColor]);
    CGContextFillRect(context, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.selectionIndicatorImage = img;
}

@end