自定义tabbarcontroler


。h文件继承自UITabBarController

//
//  MainTabbarController.h
//  Identify
//
//  Created by wupeng on 15/10/20.
//  Copyright (c) 2015年 StarShine. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface MainTabbarController : UITabBarController
@end

.m实现文件

//
//  MainTabbarController.m
//  Identify
//
//  Created by wupeng on 15/10/20.
//  Copyright (c) 2015年 StarShine. All rights reserved.
//
#define RANDOMCOLOR [UIColor colorWithRed:(arc4random() % 255)/255.0f green:(arc4random() % 255)/255.f blue:(arc4random() % 255)/255.f alpha:1]
#import "MainTabbarController.h"
#import "UIView+RectSize.h"
#import "ImageUtils.h"
#import "UIView+RectSize.h"
@interface MainTabbarController () <UINavigationControllerDelegate>
@property (strong,nonatomic) UIView *tabbarBaseView;
@property (strong,nonatomic) UIImageView *tabBarView;
@property (nonatomic, weak) UIButton *selectedBtn;
@property (assign,nonatomic) BOOL tabBarIsShow;
@end

@implementation MainTabbarController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.selectedIndex = 2;
    self.tabBarIsShow = YES;
    [self loadtabbar];
}
-(UIView *)tabbarBaseView{
    if (!_tabbarBaseView) {
        _tabbarBaseView = [[UIView alloc] initWithFrame:CGRectMake(CGFLOAT_MIN, self.view.h - 60, self.view.w, 60)];
        _tabbarBaseView.backgroundColor = [UIColor clearColor];
    }
    return _tabbarBaseView;
}
-(UIImageView *)tabBarView {
    if (!_tabBarView) {
        self.tabBarView = [[UIImageView alloc] initWithFrame:CGRectMake(CGFLOAT_MIN,10, self.view.w, 50)];
        self.tabBarView.backgroundColor = [UIColor whiteColor];
        self.tabBarView.userInteractionEnabled = YES;
    }
    return _tabBarView;
}
-(void)loadtabbar {
    [self.tabBar removeFromSuperview];
    [self.view addSubview:self.tabbarBaseView];
//画分割线
    UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(CGFLOAT_MIN,9, self.view.w,1)];
    lineView.backgroundColor = [UIColor colorWithRed:210.f/255.f green:210.f/255.f blue:210.f/255.f alpha:1.f];
    [self.tabbarBaseView addSubview:lineView];
    [self.tabbarBaseView addSubview:self.tabBarView];
    for (int i = 0; i < self.viewControllers.count; i++) {
        UIButton *tabbarButton = [[UIButton alloc] init];
        UINavigationController *NavController = self.viewControllers[i];
        NavController.delegate = self;
        if (i!=2) {
            CGFloat x = i * self.tabBarView.frame.size.width / self.viewControllers.count;
            tabbarButton.frame = CGRectMake(x, 0, self.tabBarView.frame.size.width / self.viewControllers.count,35);
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGFLOAT_MIN, CGFLOAT_MIN, tabbarButton.w, 10)];
            titleLabel.y = tabbarButton.bottom;
            titleLabel.centerX = tabbarButton.centerX;
            titleLabel.text = NavController.tabBarItem.title;
            titleLabel.textAlignment = NSTextAlignmentCenter;
            titleLabel.font = [UIFont systemFontOfSize:10.f];
            titleLabel.textColor = [UIColor colorWithRed:177.f/255.f green:177.f/255.f blue:177.f/255.f alpha:1.f];
            [self.tabBarView addSubview:titleLabel];
            [tabbarButton setImage:NavController.tabBarItem.image forState:UIControlStateNormal];
            [tabbarButton setImage:NavController.tabBarItem.selectedImage forState:UIControlStateSelected];
        } else {
            tabbarButton.frame = CGRectMake(CGFLOAT_MIN, -10, 60, 60);
            tabbarButton.centerX = self.tabBarView.centerX;
            [tabbarButton setImage:NavController.tabBarItem.image forState:UIControlStateNormal];
            [tabbarButton setImage:NavController.tabBarItem.selectedImage forState:UIControlStateSelected];
        }
        [tabbarButton setTitleColor:[UIColor colorWithRed:177.f/255.f green:177.f/255.f blue:177.f/255.f alpha:1.f] forState:UIControlStateNormal];
        [self.tabBarView addSubview:tabbarButton];
        tabbarButton.tag = i;
        tabbarButton.backgroundColor = [UIColor clearColor];
        [tabbarButton addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
        //设置刚进入时,第一个按钮为选中状态
        if (2 == i) {
            tabbarButton.selected = YES;
            self.selectedBtn = tabbarButton;
        }
    }
}
- (void)navigationController:(UINavigationController *)navController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController.hidesBottomBarWhenPushed || navController.viewControllers.count > 1)
    {
        [self hideTabBar];
    }
    else
    {
        [self showTabBar];
    }
}

- (void)hideTabBar {
    if (!self.tabBarIsShow)
    { //already hidden
        return;
    }
    [self.tabBar removeFromSuperview];
    [UIView animateWithDuration:UINavigationControllerHideShowBarDuration
                     animations:^{
                         self.tabbarBaseView.y = self.view.h;
                     }];
    self.tabBarIsShow = NO;
}

- (void)showTabBar {
    if (self.tabBarIsShow)
    { // already showing
        return;
    }
    [self.tabBar removeFromSuperview];
    [UIView animateWithDuration:UINavigationControllerHideShowBarDuration
                     animations:^{
                         self.tabbarBaseView.y = self.view.h - 60;
                     }];
    self.tabBarIsShow = YES;
}
/**
 *  自定义TabBar的按钮点击事件
 */
- (void)clickBtn:(UIButton *)button {
    self.selectedBtn.selected = NO;
    button.selected = YES;
    self.selectedBtn = button;
    self.selectedIndex = button.tag;
}


@end






你可能感兴趣的:(自定义tabbarcontroler)