我是iOS开发的新手,但经过大量搜索我的答案后,我还没有找到它。我现在正在考虑在标签栏上使用纯图像视图,即使我喜欢使用标签栏元素。我的问题是,当我选择该按钮时,我没有看到任何方法来更改标签栏按钮单元格的背景颜色。我可以改变色调(我用于按钮的图像的颜色)。是否有选择时更改背景的战争(我选择按钮时使用白色图像,因此我需要更改单元格的背景颜色),还是应该使用imageView来满足我的需求?
答案 0 :(得分:0)
编辑2:我认为您可以使用 selectedImageTintColor :(已弃用)或 selectionIndicatorImage :来自UITabBar的方法来实现您的要求。
旧回复:
有一个方便的属性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