您的位置:首页 > 产品设计 > UI/UE

(原) 定制使UITabBarController的tabbar选中tabbaritem时不高亮以及换背景色(支持iPad旋转)

2012-03-21 23:35 441 查看
(注: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐