CustomTabBarViewController

//  AppDelegate.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "AppDelegate.h"
#import "CustomTabBarViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    CustomTabBarViewController *customTabBar= [[CustomTabBarViewController alloc]init];
    self.window.rootViewController=customTabBar;
    return YES;
}



//
//  ViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end


//  ViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
//  CustomTabBarViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CustomTabBarViewController : UITabBarController

@end


//
//  CustomTabBarViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "CustomTabBarViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
#import "FourthViewController.h"
@interface CustomTabBarViewController ()

@end

@implementation CustomTabBarViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //隐藏系统tabbar
    self.tabBar.hidden=YES;
    
    //创建视图控制器数组
    [self creatViewController];
    
    //
    //创建tabbar
    UIImageView *bgView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"tabbg"]];
    bgView.tag=499;
    bgView.frame=CGRectMake(0, self.view.frame.size.height-49, self.view.frame.size.width, 49);
    [self.view addSubview:bgView];
    self.view.backgroundColor=[UIColor cyanColor];
    //打开用户交互使能
    bgView.userInteractionEnabled=YES;
    CGFloat space =(self.view.frame.size.width-4*30)/5;
    
    for (int i=0; i<4; i++) {
        UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame=CGRectMake(space+i*(30+space),9, 30, 30);
        NSString *imageName =[NSString stringWithFormat:@"tab_%i",i];
        NSString *selectimageName =[NSString stringWithFormat:@"tab_c%i",i];
        //设置正常状态图片
        [btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
        //设置选中状态图片
        [btn setBackgroundImage:[UIImage imageNamed:selectimageName] forState:UIControlStateSelected];
        //添加点击事件
        [btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
        btn.tag=100+i;
        
        //设置选中状态的btn
        if(btn.tag==100)
        {
            btn.selected=YES;
        }
        [bgView addSubview:btn];
    }
    
    UILabel *label =[[UILabel alloc]initWithFrame:CGRectMake(space, 40, 30, 4)];
    label.backgroundColor=[UIColor orangeColor];
    label.tag=498;
    [bgView addSubview:label];
    
    
}

-(void)btnClicked:(UIButton *)btn
{
    
    //self.selectedIndex=3;
    //记录选中的button
    NSInteger index =btn.tag-100;
    UIView *bgView =[self.view viewWithTag:499];
    for (UIView *view in bgView.subviews) {
        if(view.tag!=498)
        {
            if(btn.tag==view.tag)
            {
                //btn.selected=YES;
                ((UIButton *)view).selected=YES;
                
            }
            else{
                //btn.selected=NO;
                ((UIButton *)view).selected=NO;
            }
        }
    }
    self.selectedIndex=index;
    
    
    UILabel *label =(UILabel *)[bgView viewWithTag:498];
    CGFloat space =(self.view.frame.size.width-4*30)/5;
    [UIView animateWithDuration:0.3 animations:^(void){
        CGRect frame =label.frame;
        frame.origin.x  =space+(space +30)*index;
        label.frame=frame;
    }];
}

-(void)creatViewController
{
    FirstViewController *firstVC=[[FirstViewController alloc]init];
    SecondViewController *secondVC=[[SecondViewController alloc]init];
    ThirdViewController *thirdVC=[[ThirdViewController alloc]init];
    FourthViewController *fourthVC =[[FourthViewController alloc]init];
    
    NSArray *viewController =[NSArray arrayWithObjects:firstVC,secondVC,thirdVC,fourthVC, nil];
    self.viewControllers=viewController;
    //self.tabBarController.viewControllers=viewController;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
 #pragma mark - Navigation
 
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
 }
 */

@end
//  FourthViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface FourthViewController : UIViewController

@end


//  FourthViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "FourthViewController.h"

@interface FourthViewController ()

@end

@implementation FourthViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor redColor];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



//  ThirdViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ThirdViewController : UIViewController

@end



//  ThirdViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "ThirdViewController.h"

@interface ThirdViewController ()

@end

@implementation ThirdViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor blueColor];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



//  SecondViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController

@end



//  SecondViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor cyanColor];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


//  FirstViewController.h
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface FirstViewController : UIViewController

@end


//  FirstViewController.m
//  CustomTabBar
//
//  Created by qianfeng on 15/7/9.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor yellowColor];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
原文地址:https://www.cnblogs.com/0515offer/p/4649540.html