无法为标签栏设置背景图片
Posted
技术标签:
【中文标题】无法为标签栏设置背景图片【英文标题】:Cannot set background image for tabbar 【发布时间】:2012-01-25 10:28:25 【问题描述】:我无法在标签栏上设置背景图片。我已经升级到 ios5 和 Xcode 4.2,并且标签栏背景图像刚刚停止工作。
标签栏只出现在我的 RootViewController 上。
我设法使用 Interface Builder 并应用了一种背景颜色,这不是我想要的,但现在我会这样做。由于某种原因,这只适用于 iOS5。理想情况下,我想以编程方式进行。我正在尝试使以下代码正常工作:
RootViewController.h
@interface RootViewController : UIViewController
IBOutlet UITabBar *mainTabBar;
IBOutlet UITabBarItem *settingsBarItem;
IBOutlet UITabBarItem *infoBarItem;
IBOutlet UITabBarItem *aboutBarItem;
@property (retain,nonatomic) UITabBar *mainTabBar;
@end
RootViewController.m
-(void)viewDidLoad
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"smallMenuBackground.png"]];
if ([mainTabBar respondsToSelect:@selector(setBackgroundImage:)])
mainTabBar.backgroundImage = imageView;
else
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *v = [[UIView alloc] initWithFrame:frame];
UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
UIColor *c = [[UIColor alloc] initWithPatternImage:i];
v.backgroundColor = c;
[c release];
[mainTabBar insertSubview:v atIndex:0];
[v release];
这段代码对我不起作用,我一定是做错了什么,所以感谢任何帮助。
我也收到了几条警告消息:
1) 未找到实例方法'-respondToSelect:'(返回类型默认为'id')
2) 从 'UIImageView *' 分配给 'UIImage *' 的指针类型不兼容
编辑
整个代码太大,这里粘贴不上,RootViewController.h 是http://pastie.org/3249124,RootViewController.m 是http://pastie.org/3249137
【问题讨论】:
看起来与此类似的问题 - ***.com/questions/7800474/… 我可以帮助你解决第二个警告,你应该为这一行分配一个图像mainTabBar.backgroundImage = imageView;
,也许试试 mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"];
所有,请参阅以下帖子以解决问题。 ***.com/questions/8909379/…
答案请看以下链接:***.com/questions/8909379/…
【参考方案1】:
这一行,不应该是这样
if ([mainTabBar respondsToSelector:@selector(setBackgroundImage:)])
respondsToSelector:
不是respondsToSelect:
还有,正如它所说的那样,
mainTabBar.backgroundImage = imageView;
应该是
mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"];
因为backgroundImage
是UIImage
而你的imageView
是UIImageView
编辑
另外,我发现你的 else 语句中的代码有点奇怪,试试这是否有效。
else
UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
UIImageView* imageView = [UIImageView alloc] initWithImage:i];
[mainTabBar insertSubview:imageView atIndex:0];
[imageView release];
编辑 2:
if ([mainTabBar respondsToSelect:@selector(setTintColor:)])
UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
UIColor* c = [[UIColor alloc] initWithPatternImage:i];
mainTabBar.tintColor = c;
else
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *v = [[UIView alloc] initWithFrame:frame];
UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
UIColor *c = [[UIColor alloc] initWithPatternImage:i];
v.backgroundColor = c;
[c release];
[mainTabBar insertSubview:v atIndex:0];
[v release];
【讨论】:
感谢 X Slash,它消除了警告,但我仍然遇到背景图像未按预期显示的问题。 哎呀,抱歉,我只是假设您的代码(逻辑)正常工作,但存在语法错误。 感谢 X Slash,仍然没有运气,这没有用。我已经编辑了我的原始帖子以链接到完整的代码列表。 对不起,我希望最后一点对你有用,如果没有,我没有什么可以提供给你了 嗨,我想将图像设置为 tabBar 图标...图像是彩色图像...我该怎么做,如果图像是黑白的,那么我没有任何问题,但它用彩色图像制造问题【参考方案2】:你有一个小问题,你在 mainTabBar.backgroundImage 中传递 imageview 它是磨损的,你将传递 UIImage ...请检查此代码
-(void)viewDidLoad
if ([mainTabBar respondsToSelect:@selector(setBackgroundImage:)])
mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"] ;
else
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *v = [[UIView alloc] initWithFrame:frame];
UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
UIColor *c = [[UIColor alloc] initWithPatternImage:i];
v.backgroundColor = c;
[c release];
[mainTabBar insertSubview:v atIndex:0];
[v release];
【讨论】:
我已经编辑了带有完整代码列表链接的原始帖子。 [mainTabBar insertSubview:imageView atIndex:0];此代码替换为 [mainTabBar insertSubview:imageView atIndex:0];以上是关于无法为标签栏设置背景图片的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化分面图(facet_grid)自定义设置分面图标签栏的背景色(默认背景色为灰色)