自定义UITabBarController标签视图控制器
首先创建一个类,继承自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标签视图控制器的更多相关文章
- UITabBarController — 标签视图控制器
UITabBarController - 标签视图控制器 UITabBarController 分为三层结构: (1).tab bar (2.)Custom Content (3.). Tab bar ...
- UITabBarController ---- 标签视图控制器
直接上代码: // // AppDelegate.m // // #import "AppDelegate.h" #import "RootViewController. ...
- 标签视图控制器UITabBarController
标签视图控制器 UITabBarController FirstViewController*first = [[FirstViewController alloc] init]; //创建一个UIT ...
- [Xcode 实际操作]三、视图控制器-(2)UITabBarController选项卡(标签)视图控制器
目录:[Swift]Xcode实际操作 本文将为你演示,选项卡视图控制器的创建和使用. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Tou ...
- iOS学习22之视图控制器
1.自定义视图 1> 概述 定义视图:系统标准UI之外,自己组合而出的新的视图. 定义视图的优点: iOS提供了很多UI组件,借助它们我们可以实现不同的功能.尽管如此,实际开发中,我们还需要 ...
- 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍
1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...
- ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告
##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...
- Swift - 标签条(UITabBar)标签页控制器(UITabBarController)用法
App底部的tab标签页可以方便的把功能模块划分清楚,只需点击相应的标签页就可以展示完全独立的视图页面,同时各标签页间的视图也可以进行数据交换. TabBarItem系统自带图标样式(System ...
- 自定义视图控制器切换(iOS)
在iOS开发过程中,通常我们会使用UINavigationController,UITabbarController等苹果提供的视图控制器来切换我们的视图.在iOS5之前,如果要自定义容器视图控制器很 ...
随机推荐
- 介绍一位OWin服务器新成员TinyFox
TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是html服务器,所有的WEB应 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- [C#版本]有趣啊!各种编程语言实现 2 + 2 = 5
首页新闻里面那个 [新闻头条]有趣啊!各种编程语言实现 2 + 2 = 5 其他的就不评论的,但是其中C#版的 真是逗比啊...评论中各种吐槽有木有... static void Main (stri ...
- ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
- Java模块化规范之争(转载)
经过近20年的发展,Java语言已成为今日世界上最成功.使用的开发者人数最多的语言之一,Java世界中无数商业的或开源的组织.技术和产品共同构成了一个无比庞大的生态系统. 与大多数开发人员的普遍认知不 ...
- MySQL基础之存储过程
学过之后却没有总结,今天好不容易有点时间来看看. 存储过程的优势 1.简化复杂的SQL语句,将多个SQL语句封装成为一个存储过程,可以在其中加上一些流程控制语句 2.存储过程封装在数据库内部,编译之后 ...
- js ajax php分页组件
github https://github.com/lihefen/pageList html页面 <!DOCTYPE html><html><head>< ...
- UML
UML:1.继承关系用空心三角形+实线来表示2.实现接口用空心三角形+虚线来表示3.关联关系用实线箭头来表示4.依赖关系用虚线箭头来表示5.聚合关系用空心菱形+实线箭头来表示6.组合关系用实心菱形+实 ...
- webpack配置别名alias出现的错误匹配
@(webpack) webpack是一款功能强大的前端构建工具,不仅仅是针对js,它也可通过各种loader来构建相关的less,html,image等各种资源,将webpack配合流程制定工具gu ...