自定义tabBar控制器

原创 2015年07月07日 18:26:08

一、控制器部分


#import "JRTabBarConroller.h"
#import "JRTabBar.h"

@interface JRTabBarConroller ()<JRTabBarProtocol>

@property(nonatomic,weak) UIViewController * currentVC;

@end

@implementation JRTabBarConroller

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor blackColor];

    //1 添加当前显示的控制器
    [self _setUpSelectController:0];
    
    //2 添加tabbar
    [self _setUpTabbar];
   
}

#pragma mark - 添加tabbar
- (void) _setUpTabbar{
    
    JRTabBar * tab=[[JRTabBar alloc] initWithFrame:CGRectMake(0, kHeight-49,kWidth , 49) andItems:self.items];
    tab.delegate=self;
    [self.view addSubview:tab];
    
    tab.hidden = self.tabbarHidden;
}


//设置视图控制器
- (void)_setUpSelectController:(NSInteger) index{
    
    //如果重复点击,取消操作
    UIViewController * vc=self.viewControllers[index];
    if(self.currentVC==vc)return;
        
    //第一次不进行动画
    if(self.currentVC==nil){
        [self.view addSubview:vc.view];
        self.currentVC=vc;
    }else{
     //第二次开始加载动画
        //将当前的视图快速移动到屏幕的最边缘位置,然后在动画慢慢的拉回来从而达到翻页效果
        
     [self.view insertSubview:vc.view aboveSubview:self.currentVC.view];
        vc.view.transform=CGAffineTransformMakeTranslation(kWidth, 0);
        [UIView animateWithDuration:0.5 animations:^{
            vc.view.transform=CGAffineTransformIdentity;
            
        } completion:^(BOOL finished) {
            [self.currentVC.view removeFromSuperview];//移除控制器的view,防止重复添加
            self.currentVC=vc;
        }];

    }
    
    
}



#pragma mark - JRTabBarProtocol

- (void)changeVC:(NSInteger)index{

    NSInteger tag=index-100;
   
    
    // 重新切换控制器
    [self _setUpSelectController:tag];
    
    
}


@end




二、模型部分定义的属性和方法

@property(nonatomic,copy) NSString * title;
/** 图片*/
@property(nonatomic,strong) UIImage * image;//注意uimage使用的是strong,uiimage不是视图

/** 选中时图片*/
@property(nonatomic,strong) UIImage * imageSelected;
- (instancetype)initWithTitle:(NSString *) title andImage:(UIImage *) image;




三、自定义的tabBar部分

@implementation JRTabBar
-(instancetype)initWithFrame:(CGRect)frame andItems:(NSArray *) array{

    self = [super initWithFrame:frame];
    if (self) {
        self.itemArray=array;
        [self addItems];
        
        //默认灰色
        self.backgroundColor=[UIColor lightGrayColor];
        
    }
    return self;

}

#pragma mark - 增加item

- (void)addItems{

    CGFloat space =(kWidth-2*kEdgeMargin-self.itemArray.count*40)/(self.itemArray.count-1);
    for (int i=0;i<self.itemArray.count;i++) {

       JRItem *item= [[[NSBundle mainBundle] loadNibNamed:@"jritem" owner:nil options:nil] firstObject];
        item.tag=100+i;
        
        //1 初始化item
        
        JRItemModel * model=self.itemArray[i];
        item.imageView.image=model.image;
        item.label.text=model.title;
        
        //2 修改坐标
        CGRect frame=item.frame;
        frame.origin.x=kEdgeMargin+i*(space+40);
        item.frame=frame;
        
        //3加入tabbar
        [self addSubview:item];
   
        
        //增加点击手势
        UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(showInfo:)];
        [item addGestureRecognizer:tap];
         
    }
  
}

- (void) showInfo:(UITapGestureRecognizer *) ges{
    NSInteger tag= ges.view.tag;
    [self.delegate changeVC:tag];

}




自定义UITabBarController,并设为窗口的根控制器

我们这里不用Main.storyBoard作为程序的主窗口,我们采用代码来自己创建窗口。 下面来到AppDelegate.m,#import "TabBarController.h"(这是我...
  • github_26672553
  • github_26672553
  • 2016年06月27日 10:16
  • 1059

自定义TabBarController添加跳转控制器并且进行封装(根据自定义TabBar)

1>自定义TabBarController 2>对选择子控制器进行包装 3>封装代码 4>并且实现自动切换...
  • ZZ_IOSdeveloper
  • ZZ_IOSdeveloper
  • 2015年10月31日 12:02
  • 1005

Swift之UITabBarController 导航控制器的自定义

http://www.jb51.net/article/73924.htm 博文原地 swift导航控制器,导航控制器类继承UITabBarController // AppDeleg...
  • u010029229
  • u010029229
  • 2016年02月03日 16:24
  • 556

自定义导航控制器,统一设置Push的时候隐藏底部的tabbar

#import "NavigationController.h" @interface NavigationController () @end @implementation Navigati...
  • github_26672553
  • github_26672553
  • 2015年10月12日 21:11
  • 1308

在ios中自定义tabbar跳转隐藏问题

自定义tabbar高度的跳转隐藏问题 在ios开发(http://www.maiziedu.com/course/ios/)中,如何自定义tabbar高度的跳转隐藏问题,比如和系统自带的tabbar...
  • qq_32506555
  • qq_32506555
  • 2016年04月06日 20:52
  • 1613

iOS开发-实现TabBar中间凸起按钮、不规则按钮(自定义TabBar)

效果: PS:这里需要用到UIView一个分类的一些属性,参考http://blog.csdn.net/doubleface999/article/details/79085764,图标素材等自...
  • doubleface999
  • doubleface999
  • 2018年01月17日 15:20
  • 61

iOS自定义tabBar手势侧滑返回(仿系统)

iOS自定义tabBar手势侧滑返回(仿系统) 当我们自己创建了一个自定义的tabBar,通过push跳转页面的时候,会发现tabBar没有像我们所希望的那样隐藏起来。 然后,我们通过hide来隐藏我...
  • u010255464
  • u010255464
  • 2015年11月19日 18:06
  • 1130

Xcode9学习笔记16 - 选项卡视图控制器UITabBarController

override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after ...
  • u011728344
  • u011728344
  • 2017年10月23日 07:25
  • 171

iOS 跳转到主控制器MainTabbar某一个分控制器,解决办法?

最近做项目一个需求要跳转到主控制器MainTabbar上某一个分控制器上,总结一个简单的方便的方法: AppDelegate *delegate = (AppDelegate *)[[UIA...
  • u010960265
  • u010960265
  • 2017年10月10日 14:29
  • 150

如何拿到tabbarcontroller,如何拿到主导航控制器

在实际开发过程中,我们通常会遇到这样的问题,在模型类中,或是点击手势的方法中,我需要拿到主导航控制器,通过它来实现带导航跳转,又或者在tabbar的某个页面中。要拿到主tabbar然后拿到其它也面的徽...
  • lee727n
  • lee727n
  • 2017年06月09日 02:54
  • 907
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义tabBar控制器
举报原因:
原因补充:

(最多只允许输入30个字)