首先创建一个类,继承自UItabBarController

然后在.m文件中:

这里我有两个宏定义:

#define WIDTH (myView.frame.size.width / 4) //我在写4个按钮(即4个标签,所以是所有宽度除以4)
#define HEIGHT (myView.frame.size.height)

然后写延展,声明了一个按钮属性,用来记录上一个被点击的按钮(这是用来改变颜色,即点击状态的):

@interface MyTabBarController ()

//之前选中的按钮
@property(nonatomic, retain) UIButton *selectedBtn; @end

然后开始写自己想要的东西了,在viewDidLoad中:

(1)删除继承父类而来的tabBar,自定义自己想要的视图,其frame为原来tabBar的frame。

(2)然后定义了4个按钮和4个label,即标签和标签下的标题

(3)然后循环给4个按钮添加点击事件,触发事件是同一个clickBtn

- (void)viewDidLoad {
[super viewDidLoad];
//删除现有的tabBar
CGRect rect = self.tabBar.frame;
[self.tabBar removeFromSuperview]; //添加自己的视图
UIView *myView = [[UIView alloc] init];
myView.backgroundColor = [UIColor whiteColor];
myView.frame = rect;
[self.view addSubview:myView]; //主页发现按钮
UIButton *findBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[findBtn setImage:[UIImage imageNamed:@"icon_home_n"] forState:UIControlStateNormal];
[findBtn setImage:[UIImage imageNamed:@"icon_home_h"] forState:UIControlStateSelected];
findBtn.tag = 1;
findBtn.frame = CGRectMake(0, -20, WIDTH, HEIGHT);
//默认选中是发现按钮
findBtn.selected = YES;
[findBtn setTintColor:[UIColor colorWithRed:0.886 green:0.365 blue:0.247 alpha:1.000]];
self.selectedBtn = findBtn;
[myView addSubview:findBtn]; UILabel *findLabel = [[UILabel alloc] initWithFrame:CGRectMake(WIDTH/2 -10, HEIGHT - 20, WIDTH, 20)];
findLabel.text = @"发现";
findLabel.textColor = [UIColor colorWithRed:0.804 green:0.325 blue:0.227 alpha:1.000];
findLabel.font = [UIFont systemFontOfSize:10];
findLabel.tag = 101;
[myView addSubview:findLabel];
[findLabel release]; //搜索页
UIButton *searchBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[searchBtn setImage:[UIImage imageNamed:@"icon_search_n"] forState:UIControlStateNormal];
[searchBtn setImage:[UIImage imageNamed:@"icon_search_h"] forState:UIControlStateSelected];
searchBtn.tag = 2;
searchBtn.frame = CGRectMake(WIDTH, -20, WIDTH, HEIGHT);
[myView addSubview:searchBtn]; UILabel *searchLabel = [[UILabel alloc] initWithFrame:CGRectMake(WIDTH + WIDTH/2 -10, HEIGHT - 20, WIDTH, 20)];
searchLabel.text = @"搜索";
searchLabel.textColor = [UIColor grayColor];
searchLabel.font = [UIFont systemFontOfSize:10];
searchLabel.tag = 102;
[myView addSubview:searchLabel];
[searchLabel release]; //收藏页
UIButton *costBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[costBtn setImage:[UIImage imageNamed:@"iconfont-like"] forState:UIControlStateNormal];
[costBtn setImage:[UIImage imageNamed:@"iconfont-like-selected"] forState:UIControlStateSelected];
costBtn.tag = 3;
costBtn.frame = CGRectMake(2 * WIDTH, -20, WIDTH, HEIGHT);
[myView addSubview:costBtn]; UILabel *collectLabel = [[UILabel alloc] initWithFrame:CGRectMake(2 * WIDTH + WIDTH/2 -10, HEIGHT - 20, WIDTH, 20)];
collectLabel.text = @"收藏";
collectLabel.textColor = [UIColor grayColor];
collectLabel.font = [UIFont systemFontOfSize:10];
collectLabel.tag = 103;
[myView addSubview:collectLabel];
[collectLabel release]; //设置页
UIButton *setUpBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[setUpBtn setImage:[UIImage imageNamed:@"icon_setting_n"] forState:UIControlStateNormal];
[setUpBtn setImage:[UIImage imageNamed:@"icon_setting_h"] forState:UIControlStateSelected];
setUpBtn.tag = 4;
setUpBtn.frame = CGRectMake(3 * WIDTH, -20, WIDTH, HEIGHT);
[myView addSubview:setUpBtn]; UILabel *setUpLabel = [[UILabel alloc] initWithFrame:CGRectMake(3 * WIDTH + WIDTH/2 -10, HEIGHT - 20, WIDTH, 20)];
setUpLabel.text = @"设置";
setUpLabel.textColor = [UIColor grayColor];
setUpLabel.font = [UIFont systemFontOfSize:10];
setUpLabel.tag = 104;
[myView addSubview:setUpLabel];
[setUpLabel release]; for (int i = 1; i <4; i++) { //4个按钮的点击事件是一个
UIButton *btn = [self.view viewWithTag:i];
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
}
}

(4)然后实现按钮的点击事件clickBtn:实现按钮和其下面标题 选择和未选择状态的切换;也需要实现视图的跳转:

#pragma mark -- 自定义tabBar按钮的点击事件
-(void)clickBtn:(UIButton *)sender {
//设置上一个按钮
self.selectedBtn.selected = NO;
UILabel *titleFormer = [self.view viewWithTag:self.selectedBtn.tag + 100];
titleFormer.textColor = [UIColor grayColor]; //设置选中状态
sender.selected = YES;
self.selectedBtn = sender;
UILabel *titleNow = [self.view viewWithTag:self.selectedBtn.tag + 100];
titleNow.textColor = [UIColor colorWithRed:0.804 green:0.325 blue:0.227 alpha:1.000]; //跳转相应的视图控制器
self.selectedIndex = sender.tag - 1;
}

然后就基本实现了一个视图控制器的功能了,自己还有什么需求可以往里加,使用就跟视图的标签视图一样使用就行,只是这里的按钮图片我都是在类里就赋值好了;

这是我自定义的tabBarController下载地址,需要的可以下下来参考参考:

http://download.csdn.net/detail/margaret_mo/9451753

自定义UITabBarController标签视图控制器的更多相关文章

  1. UITabBarController — 标签视图控制器

    UITabBarController - 标签视图控制器 UITabBarController 分为三层结构: (1).tab bar (2.)Custom Content (3.). Tab bar ...

  2. UITabBarController ---- 标签视图控制器

    直接上代码: // // AppDelegate.m // // #import "AppDelegate.h" #import "RootViewController. ...

  3. 标签视图控制器UITabBarController

    标签视图控制器 UITabBarController FirstViewController*first = [[FirstViewController alloc] init]; //创建一个UIT ...

  4. [Xcode 实际操作]三、视图控制器-(2)UITabBarController选项卡(标签)视图控制器

    目录:[Swift]Xcode实际操作 本文将为你演示,选项卡视图控制器的创建和使用. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Tou ...

  5. iOS学习22之视图控制器

    1.自定义视图 1> 概述   定义视图:系统标准UI之外,自己组合而出的新的视图. 定义视图的优点: iOS提供了很多UI组件,借助它们我们可以实现不同的功能.尽管如此,实际开发中,我们还需要 ...

  6. 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍

    1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...

  7. ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告

    ##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...

  8. Swift - 标签条(UITabBar)标签页控制器(UITabBarController)用法

    App底部的tab标签页可以方便的把功能模块划分清楚,只需点击相应的标签页就可以展示完全独立的视图页面,同时各标签页间的视图也可以进行数据交换.   TabBarItem系统自带图标样式(System ...

  9. 自定义视图控制器切换(iOS)

    在iOS开发过程中,通常我们会使用UINavigationController,UITabbarController等苹果提供的视图控制器来切换我们的视图.在iOS5之前,如果要自定义容器视图控制器很 ...

随机推荐

  1. 【腾讯Bugly干货分享】动态链接库加载原理及HotFix方案介绍

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57bec216d81f2415515d3e9c 作者:陈昱全 引言 随着项目中动 ...

  2. 全面解析ASP.NET MVC模块化架构方案

    什么叫架构?揭开架构神秘的面纱,无非就是:分层+模块化.任意复杂的架构,你也会发现架构师也就做了这两件事. 本文将会全面的介绍我们团队在模块化设计方面取得的经验.之所以加了“全面”二字,是因为本文的内 ...

  3. Linux环境下shell和vim中乱码原因及消除办法

    shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...

  4. 向Java技术进军

    前两天有个朋友要我帮忙写个打印机服务,要求能应用在.net .Dephi.和java程序上面.看了下需求不难也就串口操作,所以就在周未写了个Win32的动态库,对于一个曾经写MFC程序的.net程序员 ...

  5. Nginx学习笔记(二) Nginx--connection&request

    Nginx--connection&request 在Nginx中,主要包括了连接与处理两部分. connection 在src/core文件夹下包含有connection的源文件,Ngx_c ...

  6. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

  7. Android-Eclipse-INSTALL_FAILED_UPDATE_INCOMPATIBLE错误

    电脑重装了系统,环境问题一大堆,唉,搞死人,这不,今天就出现了这样的一个奇怪的问题. INSTALL_FAILED_UPDATE_INCOMPATIBLE 最后搜了一遍,发现是因为已经安装了这个包,包 ...

  8. 动态给textView加图片

    Drawable img = layout.getResources().getDrawable(R.drawable.icon); // 调用setCompoundDrawables时,必须调用Dr ...

  9. 开源Word读写组件DocX 的深入研究和问题总结

    一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...

  10. HTML5 学习总结(四)——canvas绘图、WebGL、SVG

    一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...