自定义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之前,如果要自定义容器视图控制器很 ...
随机推荐
- 枚举:enum
枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- EntityFramework linq 多条件查询,不定条件查询
一.场景描述: 开发的时候,有些查询功能,往往查询的条件是不确定的,用户没有填的不参与到查询中去. 如图1所示,用户可能只要给根据名称来查询即可,有时候开始时间和结束时间并不需要填写. 图 1 二.解 ...
- 单例模式——创建型模式01
1. 名称 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类.单例模式是一种对象创建型模式. 2. 问题 ...
- 前端学HTTP之WEB服务器
前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...
- XML技术的应用
XML技术的发展历史:gml--->sml--->html--->xml(可扩展标记语言). HTML和XML技术的区别: 1.HTML技术的标签不能自己定义,必须使用规定语法编写: ...
- 为什么基于Windows Server 2008 R2的网络负载均衡(NLB)配置的时候总会报错“主机不可访问”?
配置基于Windows的网络负载均衡是很容易的,操作也很简单,点点鼠标基本上就能完成,但是在进行节点(真实服务器)操作的过程中有时候会遇到一些主机不可访问的报错信息.这个又是为什么呢? Figure ...
- C#泛型方法解析
C#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了C#的生命力,可以完成C#1.0时需要编写复杂代码才可以完成的一些功能.但是作为开发者,对于泛型可谓是又爱又恨,爱的是其强大的功能 ...
- Oracle 中的sql函数以及分页
SELECT LPAD(,'*.') "LPAD example" FROM DUAL; 1.分页查询 (1)方法一:使用 between and 来实现分页 select * ...
- java泛型基础
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法. Ja ...