MyCustomTabBar.h文件

#import <UIKit/UIKit.h>

@interface MyCustomTabBar : UITabBarController

@end

MyCustomTabBar.m文件

#import "MyCustomTabBar.h"

#define kDeviceHeigh [UIScreen mainScreen].bounds.size.height

@interface MyCustomTabBar ()<UITabBarDelegate>

@end

@implementation MyCustomTabBar

-(void)viewDidLoad{

[super viewDidLoad ];

//自定义TabBar

UITabBar *tabBar = [[UITabBar alloc]initWithFrame:self.tabBar.frame];

tabBar.userInteractionEnabled = YES;

[self.view addSubview:tabBar];

tabBar.backgroundImage = [UIImage imageNamed:@"tabbg"];

// 添加5个

for (int i = 1 ; i <= 5 ; i ++ ) {

// 获取按钮普通状态和选中状态的两个图片的名称

NSString *imgName = [NSString stringWithFormat:@"TabBar%d", i];

NSString *selImgName = [NSString stringWithFormat:@"TabBar%dSel", i];

// 创建按钮

UIButton *tabBtn = [[UIButton alloc]init ];

CGFloat width = self.view.bounds.size.width / 5;

// 设置按钮的frame

tabBtn.frame =CGRectMake((i-1) * width , 0 , width , 44);

if ( i == 3 ) {

tabBtn.frame = CGRectMake(tabBtn.frame.origin.x , tabBtn.frame.origin.y - 20, tabBtn.frame.size.width, 44 + 20 );

[tabBtn setBackgroundImage:[UIImage imageNamed:@"logoff_btn_n"] forState:UIControlStateNormal];

}else{

// 设置按钮普通状态和选中状态显示的图片

[tabBtn setBackgroundImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal];

[tabBtn setBackgroundImage:[UIImage imageNamed:selImgName] forState:UIControlStateSelected ];

}

tabBtn.tag = 10 + i;

[tabBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[tabBar addSubview:tabBtn];

}

}

-(void)btnClicked:(UIButton *)button{

for (int i = 1  ; i <= 5 ; i++ ) {

UIButton *btn = (UIButton *)  [ self.view viewWithTag:10 + i];

if (btn != button) {

btn.selected = NO;

}

}

button.selected = YES;

if (button.tag == 13) {

UIViewController *vc = [[UIViewController alloc]init];

vc.view.backgroundColor = [UIColor orangeColor];

[self presentViewController:vc animated:YES completion:nil];

return;

}

self.selectedIndex = button.tag - 11;

}

@end

AppDelegate.m文件

#import "AppDelegate.h"

#import "MyCustomTabBar.h"

#import "FifthVC.h"

#import "SecondVc.h"

#import "ThirdVC.h"

#import "FourthVC.h"

#import "FirstVC.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

//先创建五个控制器对象

FirstVC *firstVC = [[FirstVC alloc]init];

SecondVc  *secondVC = [[SecondVc alloc] init];

ThirdVC *thirdVC = [[ThirdVC alloc]init];

FourthVC *fourthVC = [[FourthVC alloc]init];

FifthVC *fifthVC = [[FifthVC alloc]init];

// 创建TabBar控制器对象

MyCustomTabBar *tabBarVC = [[MyCustomTabBar alloc]init];

// 设置Tabbar的子控制器对象, 需要注意的是,TabBar控制器最多只能显示五个子视图,如果超过5个,它会只显示4个,把其他的放More选项中

tabBarVC.viewControllers = @[firstVC, secondVC, thirdVC, fourthVC, fifthVC];

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

self.window.rootViewController = tabBarVC;

[self.window makeKeyAndVisible];

return YES;

}

UI-自定义TabBar的更多相关文章

  1. iOS框架搭建(MVC,自定义TabBar)--微博搭建为例

    项目搭建 1.新建一个微博的项目,去掉屏幕旋转 2.设置屏幕方向-->只有竖向 3.使用代码构建UI,不使用storyboard 4.配置图标AppIcon和LaunchImage 将微博资料的 ...

  2. flutter 自定义tabbar 给tabbar添加背景功能

    flutter 自带的tabbar BottomNavigationBar有长按水波纹效果,不可以添加背景图片功能,如果有这方面的需求,就需要自定义tabbar了 自定义图片 我们使用BottomAp ...

  3. 自定义tabBar

    ★★★★自定义tabBar★★★★★★★ Demo下载地址:https://github.com/marlonxlj/tabBarCustom.git 前言: 有的时候需求要对tabBar进行自定义的 ...

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

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  5. 原生HTML5 input type=file按钮UI自定义

    原生<input type="file" name="file" />长得太丑 提升一下颜值 实现方案一.设置input[type=file]透明度 ...

  6. iOS 隐藏自定义tabbar

    iOS  隐藏自定义tabbar -(void)viewWillAppear:(BOOL)animated { NSArray *array=self.tabBarController.view.su ...

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

    只上项目中用到的代码: 1.实现重写TabBar的TabBarItem,然后在中间额外加一个按钮. #import <UIKit/UIKit.h> @interface BikeTabBa ...

  8. iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]

    自定义tabbar与按钮的添加 01 - 把系统的tabbar用我们自己的覆盖 LHQTabBar *lhqTabBar = [[LHQTabBar alloc]init]; [self setVal ...

  9. 关于自定义tabBar时修改系统自带tabBarItem属性造成的按钮顺序错乱的问题相关探究

      关于自定义tabBar时修改系统自带tabBarItem属性造成的按钮顺序错乱的问题相关探究 测试代码:http://git.oschina.net/Xiyue/TabBarItem_TEST 简 ...

  10. 第二篇、Swift_自定义 tabbar 的 badgeValue显示样式

    在实际的开发中,我们常常需要根据实际的需求,去改变bageValue的显示样式,默认是红色的背景,白色的字体颜色 使用方式: class BKTabBarController: UITabBarCon ...

随机推荐

  1. 利用Docker快速部署Oracle环境

    工作中需要频繁使用Oracle环境,但是每次搭建起来比较消耗时间,本想通过虚拟机模板的方式来快速安装oracle vm,但是每次改ip等环境也很耗时,因此想到docker中有没有已经做好的images ...

  2. CWM是什么?

    CWM [1]  (CommonWarehouseMetamodel公共仓库元模型)是OMG组织在数据仓库系统中定义了一套完整的元模型体系结构,用于数据仓库构建和应用的元数据建模.公共仓库元模型指定的 ...

  3. 练Focus T25必看!T25课表 视频与成功案例汇总

    练Focus T25必看!T25课表 视频与成功案例汇总! [复制链接]  http://jianfei.39.net/thread-3645799-1.html     小西i减肥         ...

  4. linux查看某个端口被哪个程序占用

    查看某个端口被哪个程序占用 netstat  -anp  |grep   端口号 查看进程号对应的程序 ps -ef | grep 17997 查看指定端口号的进程情况 netstat -tunlp

  5. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  6. 对Servlet请求或响应进行JMockit测试

    对Servlet请求及响应进行mock方法, 通过getMockInstance方法对servlet进行打桩,对servlet提供的方法进行mock,替代真正的servlet请求或响应. 参考链接: ...

  7. Percona-Server-5.7.16 启动错误

    基于:percona-server-5.7.16 启动报错:  [root@monitor mysql]# ./bin/mysqld_safe --defaults-file=/data/config ...

  8. 单片机、嵌入式CAN通信原理

    工作原理: 单片机里内置了一个FIFO(先进先出)芯片,需要发送什么报文,就往这个芯片里写.比如有两个单片机作为CAN节点,A节点往自己的FIFO中写CAN报文,B节点往自己的FIFO中写CAN报文. ...

  9. java实现同步的方法

    为何要实现同步 java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前 ...

  10. tcp连接的建立与释放

    1.TCP是面向连接的协议. 运输连接时用来传送TCP报文的.TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输链接就有三个阶段,即:连接建立.数据传送和连接释放. 在TCP ...