(注:IOS5有新的API可以实现这些功能,这里这样搞是为了支持IOS4.)
- /*
- * @brief 定制的tabbar.
- */
- #import <UIKit/UIKit.h>
- @interface XUTabBarController : UITabBarController
- {
- @private
- UIView * bgView4TabBar_;
- }
- @end
/*
* @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