设置标签栏的背景图像 [英] Setting a background image for a tabbar
问题描述
我正在尝试以编程方式为我的应用中的标签栏设置背景图片。我的代码如下:
I'm trying to programmatically set the background image for a tabbar in my app. My code is as follows:
RootViewController.h
RootViewController.h
IBOutlet UITabBar *mainTabBar;
IBOutlet UITabBarItem *settingsBarItem;
IBOutlet UITabBarItem *infoBarItem;
IBOutlet UITabBarItem *aboutBarItem;
RootViewController.m
RootViewController.m
-(void)viewDidLoad {
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"smallMenuBackground.png"]];
[mainTabBar insertSubview:imageView atIndex:0];
[imageView release];
[super viewDidLoad];
}
这对我不起作用。
更新
更新2012年1月23日
UPDATE 23rd January 2012
好的,我已经取得了一些进展。自从我升级到Xcode 4.2和IOS5后,这才停止工作。我设法使用Interface Builder中的选项将其恢复,但现在它仅适用于IOS5。理想情况下,我本来希望以编程方式开始工作,但我现在已经满足于IB解决方案。
Ok, I've made a bit of progress. This only stopped working since I upgraded to Xcode 4.2 and IOS5. I managed to get it back using the options in Interface Builder, but now it only works for IOS5. Ideally I would have liked to get working programatically but I'll settle for the IB solution for now.
我似乎无法让它适用于任何以前的版本。
I just can't seem to get it working for any previous releases.
注意:我的TabBar只在我的RootViewController上,这是我应用程序的主屏幕。
NOTE: my TabBar is only on my RootViewController, which is the main screen of my app.
理想情况下,如果我能得到Nithin建议的代码,那就太棒了:
Ideally, if I could get the code working that Nithin suggested, that would be great:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]];
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {
//iOS 5
[self.tabBarController.tabBar insertSubview:imageView atIndex:1];
}
else {
//iOS 4.whatever and below
[self.tabBarController.tabBar insertSubview:imageView atIndex:0];
}
[imageView release];
任何帮助都将不胜感激。
Any help would be appreciated.
此致,
Stephen
Regards, Stephen
推荐答案
您可以为UITabBarController使用自定义类&覆盖tabBarController。在那里,您可以设置所需的按钮和他们对图像的操作。
You can use custom class for UITabBarController & override your tabBarController. There you can set your required buttons & their actions with image.
这是你的自定义标签栏控制器类的样子:
This is how your custom tab bar controller class can be look like:
/ / CustomTabBarController.h
// CustomTabBarController.h
#import <UIKit/UIKit.h>
@interface CustomTabBarController : UITabBarController {
UIButton *settingsButton;
UIButton *infoButton;
UIButton *aboutUsButton;
}
@property (nonatomic, retain) UIButton *settingsButton;
@property (nonatomic, retain) UIButton *infoButton;
@property (nonatomic, retain) UIButton *aboutUsButton;
-(void) addCustomElements;
-(void) selectTab:(int)tabID;
@end
// CustomTabBarController.m
// CustomTabBarController.m
#import "CustomTabBarController.h"
@implementation CustomTabBarController
@synthesize settingsButton, infoButton, aboutUsButton;
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
-(void)viewDidLoad
{
[super viewDidLoad];
[self addCustomElements];
}
-(void)addCustomElements
{
// Background
UIImageView* bgView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBarBackground.png"]] autorelease];
bgView.frame = CGRectMake(0, 420, 320, 60);
[self.view addSubview:bgView];
// Initialise our two images
UIImage *btnImage = [UIImage imageNamed:@"settings.png"];
UIImage *btnImageSelected = [UIImage imageNamed:@"settingsSelected.png"];
self.settingsButton = [UIButton buttonWithType:UIButtonTypeCustom]; //Setup the button
settingsButton.frame = CGRectMake(10, 426, 100, 54); // Set the frame (size and position) of the button)
[settingsButton setBackgroundImage:btnImage forState:UIControlStateNormal]; // Set the image for the normal state of the button
[settingsButton setBackgroundImage:btnImageSelected forState:UIControlStateHighlighted]; // Set the image for the selected state of the button
[settingsButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; // Set the image for the selected state of the button
[settingsButton setBackgroundImage:btnImageSelected forState:UIControlStateDisabled];
[settingsButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];
[settingsButton setTag:101]; // Assign the button a "tag" so when our "click" event is called we know which button was pressed.
[settingsButton setSelected:true]; // Set this button as selected (we will select the others to false as we only want Tab 1 to be selected initially
// Now we repeat the process for the other buttons
btnImage = [UIImage imageNamed:@"info.png"];
btnImageSelected = [UIImage imageNamed:@"infoSelected.png"];
self.infoButton = [UIButton buttonWithType:UIButtonTypeCustom];
infoButton.frame = CGRectMake(110, 426, 100, 54);
[infoButton setBackgroundImage:btnImage forState:UIControlStateNormal];
[infoButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected];
[infoButton setBackgroundImage:btnImageSelected forState:UIControlStateHighlighted];
[infoButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];
[infoButton setTag:102];
btnImage = [UIImage imageNamed:@"aboutUs.png"];
btnImageSelected = [UIImage imageNamed:@"aboutUsSelected.png"];
self.aboutUsButton = [UIButton buttonWithType:UIButtonTypeCustom];
aboutUsButton.frame = CGRectMake(210, 426, 100, 54);
[aboutUsButton setBackgroundImage:btnImage forState:UIControlStateNormal];
[aboutUsButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected];
[aboutUsButton setBackgroundImage:btnImageSelected forState:UIControlStateHighlighted];
[aboutUsButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];
[aboutUsButton setTag:103];
// Add my new buttons to the view
[self.view addSubview:settingsButton];
[self.view addSubview:infoButton];
[self.view addSubview:aboutUsButton];
// Setup event handlers so that the buttonClicked method will respond to the touch up inside event.
[settingsButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[infoButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[aboutUsButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonClicked:(id)sender
{
int tagNum = [sender tag];
[self selectTab:tagNum];
}
- (void)selectTab:(int)tabID
{
switch(tabID)
{
case 101:
[settingsButton setSelected:true];
[infoButton setSelected:false];
[aboutUsButton setSelected:false];
break;
case 102:
[settingsButton setSelected:false];
[infoButton setSelected:true];
[aboutUsButton setSelected:false];
break;
case 103:
[settingsButton setSelected:false];
[infoButton setSelected:false];
[aboutUsButton setSelected:true];
break;
}
self.selectedIndex = tabID;
}
- (void)dealloc {
[settingsButton release];
[infoButton release];
[aboutUsButton release];
[super dealloc];
}
@end
希望这会对你有帮助很多。
Hope this will help you a lot.
这篇关于设置标签栏的背景图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!