自定义tabBar控制器

一、控制器部分

#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];

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-11 06:50:35

自定义tabBar控制器的相关文章

IOS开发-关于自定义TabBar条

今天在做项目的时候,突然有一个模块需要自定义TabBar条. 在平常很多做项目的时候,都没有去自定义过,大部分都是使用系统自带的.今天整理一个自定义TabBar条的步骤. 首先看下我们最终实现的效果: 首先需要继承UItabBar自定义一个自己的tabBar .h #import <UIKit/UIKit.h> @class THTabBar; @protocol THTabBarDelegate <UITabBarDelegate> @optional - (void)tabBa

自定义TabBar

UITabBarController是在IOS应用开发中很常用的一个类,继承于UIViewController,来实现多个视图间的切换,但很多时候系统自带的TabBar不能满足我们的需求,系统自带的一些属性我们往往无法修改,像切换项的图片的大小,这时候就需要我们自定义TabBar.例如,我们想实现下方的TabBar的这个效果,使用系统的就无法完成. 演示所需图片下载地址http://download.csdn.net/detail/zsmile123/8136531 --------------

自定义tabbar(storyBoard)

开发中系统提供的tabbar很难满足我们的项目需求,因此我们需要自定义.下面提供了一种简单自定义tabbar. 1.storyBoard中拖拽几个页面 file:///Users/dingyunfei/Desktop/屏幕快照%202015-11-30%20下午10.45.08.png 2.创建CustomViewController类代码如下 // //  CustomViewController.h //  SB框架搭建 // //  Created by 丁云飞 on 15/11/26.

仿制新浪微博iOS客户端之三-自定义TabBar

继续上一篇文章的进度,我们实际完成了微博基本框架的搭建,具体实现的效果如下左图,但我们实际需要实现的效果为右图,除去主要的页面内容不谈,仅仅下面的TabBar距离我们的需求就有相当的差距.因此本文着重于实现需要的效果.                           再简要汇总一下我们的需求: 1.我们要在TabBar原有四个按钮的基础上,再增加一个按钮,作为撰写微博的入口: 2.新加入的按钮必须和原有按钮一起,均匀分布在TabBar上: 3.新加入的按钮只有图片,没有文字. 需求汇总如上,

1行代码为每个Controller自定义“TabBar”-b

这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航条是透明的,第二个控制器的导航条是白色的,第三个控制器的导航条是橙色的.所以,为每个控制器定制自己的导航条. 02.支持全屏右滑,这简直是必须的.关于全屏右滑,最详细,也最早探究这个问题的,我了解到的是 J_雨,他应该是全屏右滑的鼻祖. 03.最重要的一点,要求全屏右滑返回的时候,导航条跟随自己的控制器流畅

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 的解决办法

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar  的解决办法 问题:iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 1.自定义代码: - (void)viewWillAppear:(BOOL)animated { [super  viewWillAppear:animated]; // 删除系统自动生成的UITabBarB

ios中解决自定义tabbar跳转隐藏问题的方法

在ios开发(http://www.maiziedu.com/course/ios/)中,如何自定义tabbar高度的跳转隐藏问题,比如和系统自带的tabbar高度不一样导致的有一条线的问题,还有push时动画效果等等一些列问题不在这里累述了,当然,思路有很多,可以参考以上链接自己琢磨琢磨,好了,下面直接上个人认为完美解决办法. 需求 1.自定义tabbar,不用系统的tabbar 2.第二点需求是自定义tabbar的高度和系统的不一样,系统的tabbar高度为49,就是因为这点导致第三个需求有

猫猫学iOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封装代码,并且系统的UINavigationController不能满足我们的需求了,所以得自定义. 首先,我们在NYTabBarViewContro

IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearchBar *searchBar = [HWSearchBar searchBar]; searchBar.width = 300; searchBar.height = 30; self.navigationItem.titleView = searchBar; //设置titleView 是搜索框