(注:IOS5有新的API可以实现这些功能,这里这样搞是为了支持IOS4.)
/*
* @brief 定制的tabbar.
*/
#import <UIKit/UIKit.h>
@interface XUTabBarController : UITabBarController
{
@private
UIView * bgView4TabBar_;
}
@end
#import "XUTabBarController.h"
@interface XUTabBarController()
@property(nonatomic, retain) UIView * bgView4TabBar;
- (void)customTabBarBackgroundColor;
- (void)setNoHighlightTabBar;
@end
@implementation XUTabBarController
@synthesize bgView4TabBar = bgView4TabBar_;
- (void)dealloc
{
[bgView4TabBar_ release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self customTabBarBackgroundColor];
}
- (void)viewDidUnload
{
[super viewDidUnload];
self.bgView4TabBar = nil;
}
#pragma mark - For iPad Rotate
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if(UIU_IsIPad)
{
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
CGRect frame = self.tabBar.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
? /*横屏*/ appFrame.size.height + 20
: appFrame.size.width + 20;
self.bgView4TabBar.frame = frame;
}
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//
[self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
}
#pragma mark - NoHighlightTab
- (void)setSelectedIndex:(NSUInteger)index
{
[super setSelectedIndex:index];
[self setNoHighlightTabBar];
}
- (void)setSelectedViewController:(UIViewController *)selectedViewController
{
[super setSelectedViewController:selectedViewController];
[self setNoHighlightTabBar];
}
- (void)setNoHighlightTabBar
{
int tabCount = [self.viewControllers count] > 5 ? 5 : [self.viewControllers count];
NSArray * tabBarSubviews = [self.tabBar subviews];
for(int i = [tabBarSubviews count] - 1; i > [tabBarSubviews count] - tabCount - 1; i--)
{
for(UIView * v in [[tabBarSubviews objectAtIndex:i] subviews])
{
if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"])
{//the v is the highlight view.
[v removeFromSuperview];
break;
}
}
}
}
#pragma mark - Custom TabBar Background Color
- (void)customTabBarBackgroundColor
{
///给tabbar换背景色
//
//frame
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
CGRect frame = self.tabBar.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)
? /*横屏*/ appFrame.size.height + 20
: appFrame.size.width + 20;
//bg color.
#define useTintColor 1
#if useTintColor
self.bgView4TabBar = [[[UINavigationBar alloc] initWithFrame:frame] autorelease];
((UINavigationBar *)self.bgView4TabBar).tintColor = XX_TabBgColor;
#else
self.bgView4TabBar = [[[UIView alloc] initWithFrame:frame] autorelease];
self.bgView4TabBar.backgroundColor = XX_TabBgColor;
#endif
//add to.
[self.tabBar insertSubview:self.bgView4TabBar atIndex:
self.tabBar.subviews.count - (self.viewControllers.count > 5 ? 5 : self.viewControllers.count)
];
}
@end
转贴: http://www.cnblogs.com/xiaouisme/archive/2012/03/21/2410820.html