定制使UITabBarController的tabbar选中tabbaritem时不高亮以及换...

(注:IOS5有新的API可以实现这些功能,这里这样搞是为了支持IOS4.)

[cpp] view plain copy print ?
  1. /* 
  2.  * @brief 定制的tabbar. 
  3.  */  
  4.   
  5. #import <UIKit/UIKit.h>   
  6.   
  7. @interface XUTabBarController : UITabBarController  
  8. {  
  9. @private  
  10.     UIView * bgView4TabBar_;  
  11. }  
  12.   
  13. @end  
/*
 * @brief 定制的tabbar.
 */

#import <UIKit/UIKit.h>

@interface XUTabBarController : UITabBarController
{
@private
    UIView * bgView4TabBar_;
}

@end

[cpp] view plain copy print ?
  1. #import "XUTabBarController.h"   
  2.   
  3.   
  4. @interface XUTabBarController()  
  5. @property(nonatomic, retain) UIView * bgView4TabBar;  
  6. - (void)customTabBarBackgroundColor;  
  7. - (void)setNoHighlightTabBar;  
  8. @end  
  9.   
  10. @implementation XUTabBarController  
  11. @synthesize bgView4TabBar = bgView4TabBar_;  
  12.   
  13. - (void)dealloc  
  14. {  
  15.     [bgView4TabBar_ release];  
  16.     [super dealloc];  
  17. }  
  18.   
  19. - (void)viewDidLoad  
  20. {  
  21.     [super viewDidLoad];  
  22.     [self customTabBarBackgroundColor];  
  23. }  
  24.   
  25. - (void)viewDidUnload  
  26. {  
  27.     [super viewDidUnload];  
  28.     self.bgView4TabBar = nil;  
  29. }  
  30.   
  31. #pragma mark - For iPad Rotate   
  32.   
  33. - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration  
  34. {  
  35.     if(UIU_IsIPad)  
  36.     {  
  37.         CGRect appFrame = [[UIScreen mainScreen] applicationFrame];  
  38.         CGRect frame = self.tabBar.frame;  
  39.         frame.origin.x = 0;  
  40.         frame.origin.y = 0;  
  41.         frame.size.width = (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft   
  42.                             || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)  
  43.         ? /*横屏*/ appFrame.size.height + 20   
  44.         : appFrame.size.width + 20;  
  45.         self.bgView4TabBar.frame = frame;  
  46.     }  
  47. }  
  48.   
  49. - (void)viewWillAppear:(BOOL)animated  
  50. {  
  51.     [super viewWillAppear:animated];  
  52.       
  53.     //   
  54.     [self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];  
  55. }  
  56.   
  57. #pragma mark - NoHighlightTab   
  58.   
  59. - (void)setSelectedIndex:(NSUInteger)index  
  60. {  
  61.     [super setSelectedIndex:index];  
  62.     [self setNoHighlightTabBar];  
  63. }  
  64.   
  65. - (void)setSelectedViewController:(UIViewController *)selectedViewController  
  66. {  
  67.     [super setSelectedViewController:selectedViewController];  
  68.     [self setNoHighlightTabBar];  
  69. }  
  70.   
  71. - (void)setNoHighlightTabBar  
  72. {  
  73.     int tabCount = [self.viewControllers count] > 5 ? 5 : [self.viewControllers count];  
  74.     NSArray * tabBarSubviews = [self.tabBar subviews];  
  75.     for(int i = [tabBarSubviews count] - 1; i > [tabBarSubviews count] - tabCount - 1; i--)  
  76.     {  
  77.         for(UIView * v in [[tabBarSubviews objectAtIndex:i] subviews])  
  78.         {  
  79.             if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"])  
  80.             {//the v is the highlight view.   
  81.                 [v removeFromSuperview];  
  82.                 break;  
  83.             }  
  84.         }  
  85.     }  
  86. }  
  87.   
  88. #pragma mark - Custom TabBar Background Color   
  89.   
  90. - (void)customTabBarBackgroundColor  
  91. {  
  92.     ///给tabbar换背景色   
  93.     //   
  94.     //frame   
  95.     CGRect appFrame = [[UIScreen mainScreen] applicationFrame];  
  96.     CGRect frame = self.tabBar.frame;  
  97.     frame.origin.x = 0;  
  98.     frame.origin.y = 0;  
  99.     frame.size.width = (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft   
  100.                         || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)  
  101.     ? /*横屏*/ appFrame.size.height + 20   
  102.     : appFrame.size.width + 20;   
  103.   
  104.     //bg color.   
  105.     #define useTintColor 1   
  106.     #if useTintColor   
  107.     self.bgView4TabBar = [[[UINavigationBar alloc] initWithFrame:frame] autorelease];  
  108.     ((UINavigationBar *)self.bgView4TabBar).tintColor = XX_TabBgColor;      
  109.     #else   
  110.     self.bgView4TabBar = [[[UIView alloc] initWithFrame:frame] autorelease];  
  111.     self.bgView4TabBar.backgroundColor = XX_TabBgColor;  
  112.     #endif   
  113.     //add to.   
  114.     [self.tabBar insertSubview:self.bgView4TabBar atIndex:  
  115.      self.tabBar.subviews.count - (self.viewControllers.count > 5 ? 5 : self.viewControllers.count)  
  116.      ];  
  117. }  
  118.   
  119. @end 

你可能感兴趣的:(定制使UITabBarController的tabbar选中tabbaritem时不高亮以及换...)