(注: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