zoukankan      html  css  js  c++  java
  • (原) 定制使UITabBarController的tabbar选中tabbaritem时不高亮以及换背景色(支持iPad旋转)

    (注: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
  • 相关阅读:
    day6心得
    安卓下拉刷新和上拉加载的具体实例
    安卓下拉刷新空间SwipeRefreshLayout的基本使用
    fresco的使用教程
    封装安卓的okhttp
    handler更新ui线程的基本用法
    安卓recyclerview的基本使用
    安卓轮播组件
    自定义toolbar教程
    原生toolbar基本使用教程
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/2410820.html
Copyright © 2011-2022 走看看