自定义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.

//  Copyright © 2015年 DLS. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface CustomViewController : UITabBarController

@end

#import "CustomViewController.h"

#import "CustabBar.h"

//stroyBoard里面的四个控制器

#import "SportsViewController.h"

#import "SettingViewController.h"

#import "SleepingViewController.h"

#import "StasticViewController.h"

@interface CustomViewController ()<DSTabbarItemViewDelegate>

@end

@implementation CustomViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self.tabBar removeFromSuperview];

CustabBar *tabBar = [[CustabBar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 49, 320, 49)];

tabBar.delegate = self;

//    tabBar.frame = CGRectMake(0, self.view.frame.size.height - 49, 320, 49);

[self.view addSubview:tabBar];

}

#pragma mark -- DSTabBarItemViewDelegate

/**

*  切换控制器

*

*  @param tag 控制器

*/

-(void)didSelectedTabbarItem:(NSInteger)tag {

self.selectedIndex = tag-1;

}

//自定义tabBar

#import <UIKit/UIKit.h>

#import "cusbutton.h"

@class CustabBar;

@protocol  DSTabbarItemViewDelegate <NSObject>

//切换控制器

-(void)didSelectedTabbarItem:(NSInteger)tag;

@end

@interface CustabBar : UIView

{

//    NSInteger select;

}

@property (nonatomic, unsafe_unretained)id<DSTabbarItemViewDelegate>delegate;

/**

*  selectBtn记录当前点击的button。

*/

@property (nonatomic, weak)UIButton*selectBtn;

@end

#import "CustabBar.h"

@implementation CustabBar

-(instancetype)initWithFrame:(CGRect)frame{

self = [super initWithFrame:frame];

if (self) {

[self addBtn];

//        self.backgroundColor = [UIColor greenColor];

}

return self;

}

-(void)addBtn{

static NSString *imageName = nil;

static NSString *selImageName = nil;

CGFloat btnW = self.frame.size.width/4;

CGFloat btnH = 49;

CGFloat btnX = 0;

CGFloat btnY = self.frame.size.height - 49;

for (int i = 0; i < 4; i++)

{

imageName = [NSString stringWithFormat:@"0%d_nor",i + 1];

selImageName = [NSString stringWithFormat:@"0%d_pre",i + 1];

cusbutton *btn = [cusbutton buttonWithType:UIButtonTypeCustom];

btnX = btnW *i;

btn.frame = CGRectMake(btnX, btnY, btnW, btnH);

btn.tag = i + 1;

[btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

[btn setBackgroundImage:[UIImage imageNamed:selImageName] forState:UIControlStateSelected];

[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

[self addSubview:btn];

//设置第一个为默认控制器

if (i == 0) {

[self btnClick:btn];

//此处不能用btn.selected = YES,点击其他按钮时默认的按钮没有取消。

}

}

}

-(void)btnClick:(cusbutton *)btn{

//_selectBtn.selected = NO上一个按钮取消

_selectBtn.selected = NO;

btn.selected = YES;

_selectBtn = btn;

//处理点击事件

[self.delegate didSelectedTabbarItem:btn.tag];

}

//布局时调用。

-(void)layoutSubviews{

CGFloat btnW = self.frame.size.width/4;

CGFloat btnH = 49;

CGFloat btnX = 0;

CGFloat btnY = self.frame.size.height - 49;

for (int i = 0; i < self.subviews.count; i ++) {

btnX = btnW *i;

cusbutton *btn = (cusbutton *)self.subviews[i];

btn.frame = CGRectMake(btnX, btnY, btnW, btnH);

}

}

//自定义BUtton

#import <UIKit/UIKit.h>

@interface cusbutton : UIButton

@end

#import "cusbutton.h"

@implementation cusbutton

//重写高亮代码。不让按钮有高亮状态

-(void)setHighlighted:(BOOL)highlighted{

//highlighted = NO;

}

@end

时间: 2024-12-29 06:24:01

自定义tabbar(storyBoard)的相关文章

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 --------------

iOS开发之功能模块--关于自定义TabBar条

只上项目中用到的代码: 1.实现重写TabBar的TabBarItem,然后在中间额外加一个按钮. 1 #import <UIKit/UIKit.h> 2 3 @interface BikeTabBar : UITabBar 4 5 @end 1 #import "BikeTabBar.h" 2 3 @interface BikeTabBar () 4 5 //@property (nonatomic,weak)UIButton *centerButton; 6 7 @en

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

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

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

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

自定义tabBar中的注意事项

1.在自定义tabBar中,往tabBar中添加按钮的时候,默认情况下会在按钮的前面和后面添加UITabBarBackgroundView和UIImageView,导致子控件会增加两个,在自动布局中就会出现排版错误. 解决办法:让自定义的tabBar继承UIView. 2.对于tabBarItem,要想改变对象的某个属性,最好使用KVO来监听属性改变,使用的方法如下: ? 1 2 3 4 5 6 7 8 9 /**  *  监听到某个对象的属行改变了就去调用  *  *  @param keyP

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

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

自定义tabBar在push到下一个界面的时候实现隐藏

今天工作中用到了自定义tabBar,在其中隐藏掉了系统的tabBar,用view自定义一个tabBar,效果还挺好.接下来问题来了,在我push到子页面的时候就出现了tabBar无法隐藏的问题,搞了半天终于弄好了,拿出来与大家一块分享,废话不多说,直入正题. 在自定义的TabBarController.m里写方法-(void)setHidesBottomBarWhenPushed:(BOOL)hidesBottomBarWhenPushed{    self.你自己定义的View.hidden

自定义Tabbar实现push动画隐藏效果

在之前的一篇文章(链接)中我写到了没有用UITabbarController来实现一个自定义Tabbar,当然功能也简陋了点.注意到在Weico或微信中的自定义tabbar有一个这样的功能:push到下一个页面时tabbar会被自动隐藏,下面我就来说说如何使我前面做的自定义tabbar也能实现隐藏. 如果是原生的tabbar,这个功能实现很容易.在iOS中,每个UIViewController都有一个属性hidesBottomBarWhenPushed,每次push一个viewControlle