Ios 选择时,选项卡栏按钮背景会发生变化

Ios 选择时,选项卡栏按钮背景会发生变化,ios,tabbar,uitabbaritem,Ios,Tabbar,Uitabbaritem,我是iOS开发方面的新手,但在大量搜索我的答案之后,我还没有找到答案。我现在正在考虑在选项卡栏上使用纯图像视图,尽管我喜欢使用选项卡栏元素。我的问题是,当我选择该按钮时,我看不到任何改变选项卡栏按钮单元格背景颜色的方法。我可以更改色调(我用于按钮的图像的颜色)。选择时是否需要简单地更改背景(选择按钮时我使用白色图像,因此我需要更改单元格的背景颜色),还是应该使用imageView来满足我的需要?编辑2:我认为使用selectedImageTintColor:(不推荐使用)或选择指示图像:uita

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

编辑2:我认为使用selectedImageTintColor:(不推荐使用)或选择指示图像:uitabar中的方法


旧答复:

根据文件:

有一个方便的属性SelecteImage来执行这些操作

Use可以直接在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;
}
编辑:uitabaritem没有背景色。因此,您必须将“背景色”直接嵌入到图像和选定的图像中


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

若要更改选定的选项卡栏项目背景,请使用以下初始化创建名为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

我的问题是,我想更改选项卡栏按钮填充的整个空间的背景颜色,而不仅仅是所选的图像。。。。这是我在问题中指出的。我选择的图像很好。我已经编辑了我的答案。如果它仍然不能满足你自己,你能发布你想要达到的目标的图片吗?与此同时,自从我上次回复以来,我一直在思考这个方向。但我当时在想,当我旋转屏幕(并将选项卡栏加宽到全宽)时,图像不会拉伸?我有时间就试试看。我责怪公司在想要我描述的lol时给我发送的透明图片。我将在一小时后回来。(批准你的回答是否结束了我的帖子?我仍然希望得到更多启发)我更新了我的评论。UITabBar似乎有方便的方法来实现这一点。告诉我这是否足够。以下是与您的问题相关的其他主题:[[UITabBar外观]设置选择指示图像:blackk];此调用是否会影响我在应用程序中创建的所有选项卡栏?通常情况下,我会认为我必须以某种方式参考(或出口)我正在定制的选项卡栏