UITabBarController及三种控制器的…
第一部分:UITabBarController
标签视图控制器
标签视图控制器继承自UIViewController,一经创建自带一个视图,这个视图上有两个控件
contentView 和tabBar
,是用来管理多个单视图控制器,他管理的多个单视图控制器之间是并列关系,同时存在,但是相互之间没有太大关联
UITabBarController
管理的视图控制器对象自带的View只有当它第一次出现的时候会创建,以后就不再创建,所以标签视图控制器管理的视图控制器之间是并列存在的

==========================================================
#import "SecondViewController.h"
#import "ThirdViewController.h"
#import "FifthViewController.h"
#import "ForthViewController.h"
//firstVC
FirstViewController
*firstVC =
[[FirstViewController
alloc]init];
//配置标签栏标题
firstVC.tabBarItem.title = @"FirstVC";
//配置标签图片
firstVC.tabBarItem.image = [UIImage imageNamed:@"24-gift.png"];
//配置右上角的角标
firstVC.tabBarItem.badgeValue = @"99+";
//secondVC
SecondViewController
*secondVC =
[[SecondViewController
alloc]init];
//配置标签栏标题
secondVC.tabBarItem.title = @"SecondVc";
//配置标签图片
secondVC.tabBarItem.image = [UIImage imageNamed:@"18-envelope.png"];
//配置右上角的角标
secondVC.tabBarItem.badgeValue = @"36";
//tabar的唯一标示
;
//thirdVC
ThirdViewController
*thirdVC =
[[ThirdViewController
alloc]init];
//配置标签栏标题
thirdVC.tabBarItem.title = @"ThirdVC";
//配置标签图片
thirdVC.tabBarItem.image = [UIImage imageNamed:@"82-dogpaw.png"];
//配置右上角的角标
thirdVC.tabBarItem.badgeValue = @"";
//forthVC
ForthViewController
*forthVC
=[[ForthViewController
alloc]init];
//配置标签栏标题
forthVC.tabBarItem.title = @"ForthVC";
//配置标签图片
forthVC.tabBarItem.image = [UIImage imageNamed:@"27-planet.png"];
//配置右上角的角标
forthVC.tabBarItem.badgeValue = @"任意";
FifthViewController
*fifthVC =
[[FifthViewController
alloc]init];
fifthVC.tabBarItem.title = @"FifthVC";
fifthVC.tabBarItem.image = [UIImage imageNamed:@"34-coffee.png"];
SixthViewController
*sixthVC =
[[SixthViewController
alloc]init];
sixthVC.tabBarItem.title = @"SixthVC";
sixthVC.tabBarItem.image = [UIImage imageNamed:@"29-heart.png"];
UITabBarController
*tbController =
[[UITabBarController
alloc]init];
//准备一个数组存放视图控制器
NSArray
*controllers =
@[firstVC,secondVC,thirdVC,forthVC,fifthVC,sixthVC];
[firstVC release];
[secondVC release];
[thirdVC release];
[forthVC release];
[fifthVC release];
[sixthVC release];

//1.配置所管理的单视图
tbController.viewControllers = controllers;
//2.配置标签栏颜色
tbController.tabBar.barTintColor = [UIColor blackColor];
//3.配置内容渲染颜色
tbController.tabBar.tintColor = [UIColor redColor];
//4.配置标签栏的图片
//标签栏的高度 49
tbController.tabBar.backgroundImage = [UIImage imageNamed:@"01"];
//5.配置默认选中的标签
//根据下标选择
//
tbController.selectedIndex = 2;
//根据视图控制器来选择
//
tbController.selectedViewController = forthVC;
//6.配置代理属性
tbController.delegate = self;
//将标签视图控制器指定为window的根视图控制器
self.window.rootViewController
=
tbController;
[tbController release];
return
YES;
}
//当切换标签的时候触发,询问当前的标签是否可以选中
- (BOOL)tabBarController:(UITabBarController
*)tabBarController
shouldSelectViewController:(UIViewController
*)viewController
NS_AVAILABLE_IOS(3_0){
//
if(tabBarController.selectedIndex == 1 ){
//
return NO;
//
}else{
//
return YES;
//
}
会点死,不能使用
//tabBarController
指的是当前的代理委托者
//ViewController
指的是将要选中的视图
//
if( ==
viewController.tabBarItem.tag){
//
return NO;
//
}
return
YES;

- (void)tabBarController:(UITabBarController
*)tabBarController
didSelectViewController:(UIViewController
*)viewController{
//将选中标签的角标取出,选中那一个去掉哪一个
viewController.tabBarItem.badgeValue = nil;

使用UITabBarController
管理的视图的之间的切换,走的哪些方法?
B将要出现-->A将要消失-->A已经消失-->B已经出现
A将要出现-->B将要消失-->B已经消失-->A已经出现
(void)viewWillAppear:(BOOL)animated{
NSLog(@"firstVC将要出现");
}
- (void)viewDidAppear:(BOOL)animated{
NSLog(@"firstVC已经出现");
}
- (void)viewWillDisappear:(BOOL)animated{
NSLog(@"firstVC将要消失");
}
- (void)viewDidDisappear:(BOOL)animated{
NSLog(@"firstVC已经消失");
和FirstViewController.h 一样只需把背景颜色设置一下即可ThirdViewController.m
、FifthViewController.m、ForthViewController.m、SixthViewController.m不做详细介绍只需继承自
UIViewController设置背景颜色即可。
UITabBarController
管理的标签超过5个的时候,会自动生成more按钮,more对应视图控制器是导航控制器,多出来的视图都被导航控制器管理

第二部分:MixUserControllers 控制器的混合使用
UITabBarController素材下载: http://pan.baidu.com/s/1kTvnyT5
AppDelegate.m
NBViewController
*nbVC =
[[NBViewController
alloc]init];
//将标签视图控制器对象指定为window的根视图控制器
self.window.rootViewController
= nbVC;
[nbVC release];
NBViewController.m
"ChatViewController.h"
#import "ContactViewController.h"
#import "FindViewController.h"
"MineViewController.h"
[self
configureViewController];
//修改所有导航跳的颜色---->类似于一件换肤
[[UINavigationBar
appearance]
setBarTintColor:[UIColor
lightGrayColor]];
[[UITabBar
appearance]setBarTintColor:[UIColor
lightGrayColor]];
//自定义视图控制器
- (void)configureViewController{
//消息
ChatViewController
*chatVC =
[[ChatViewController
alloc]init];
UINavigationController
*chatNC =
[[UINavigationController
alloc]initWithRootViewController:chatVC];
//chatVC.tableBarItem
可以获取到距离它最近的标签栏
//
chatVC.navigationItem 获取到距离它最近的导航条
chatNC.tabBarItem.image
=
[UIImage
imageNamed:@"tabbar_mainframe@2x.png"];
//
chatNC.tabBarItem.title = @"微信";
//
//配置导航条title
//
chatVC.navigationItem.title = @"微信";
//可以同时设置距离它最近的导航条和标签栏的标题
chatVC.title
=
@"微信";
//通讯录
ContactViewController
*contactVC =
[[ContactViewController
alloc]init];
UINavigationController
*contactNC =
[[UINavigationController
alloc]initWithRootViewController:contactVC];
contactNC.tabBarItem.image
=
[UIImage
imageNamed:@"tabbar_contacts@2x.png"];
contactVC.title
=
@"通讯录";
//发现
FindViewController
*findVC =
[[FindViewController
alloc]init];
UINavigationController
*findNC =
[[UINavigationController
alloc]initWithRootViewController:findVC];
findNC.tabBarItem.image
=
[UIImage
imageNamed:@"tabbar_discover@2x"];
findVC.title
=
@"发现";
//我的
MineViewController
*mineVC =
[[MineViewController
alloc]init];
UINavigationController
*mineNC =
[[UINavigationController
alloc]initWithRootViewController:mineVC];
mineNC.tabBarItem.image
=
[UIImage
imageNamed:@"tabbar_me@2x.png"];
mineVC.title
=
@"我";
//配置标签视图控制器管理视图的数组
NSArray
*viewControllers
= @[chatNC,contactNC,findNC,mineNC];
//释放
[chatVC release];
[chatNC release];
[contactVC release];
[contactNC release];
[findVC release];
[findNC release];
[mineVC release];
[mineNC release];
//给标签视图控制器的viewControllers数组赋值
self.viewControllers
=
viewControllers;
//
self.tabBar.backgroundImage = [UIImage
imageNamed:@"01"];
self.tabBar.barTintColor = [UIColor
lightGrayColor];
ChatViewController.m
kTableCell @"table-cell"
"DetailViewController.h"
//注册cell
[self.tableView
registerClass:[UITableViewCell
class]
forCellReuseIdentifier:kTableCell];
//1.访问到当前管理该视图的导航控制器(最近的)
self.navigationController;
//2.访问到当前管理该视图的标签栏控制器(最近)
self.tabBarController;
//3.访问到当前管理该视图控制器的导航控制器所管理偶的所有视图控制器
self.navigationController.viewControllers;
//4.访问到当前管理该视图控制器的标签视图控制器所管理的所有的视图控制器
self.tabBarController.viewControllers;
*)tableView
{
return
1;
}
*)tableView
numberOfRowsInSection:(NSInteger)section
{
return
10;
}
*)tableView:(UITableView
*)tableView
cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
UITableViewCell
*cell =
[tableView dequeueReusableCellWithIdentifier:kTableCell
forIndexPath:indexPath];
cell.textLabel.text
=
@"在和习大大聊天";
return
cell;
- (void)tableView:(UITableView
*)tableView
didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
//创建detailViewController对象
//创建UITableViewController子类时可以指定自带的tableView的格式是plain还是group样式的;
DetailViewController
*detailVC =
[[DetailViewController
alloc]initWithStyle:(UITableViewStyleGrouped)];
//跳转时是否隐藏标签栏
self.hidesBottomBarWhenPushed
=
YES;
[self.navigationController
pushViewController:detailVC
animated:YES];
//跳转返回时显示标签栏
self.hidesBottomBarWhenPushed
=
NO;
[detailVC release];
同理继承自: UITableViewController
创建没有设置内容

UITabBarController及三种控制器的…的更多相关文章
- springmvc基础篇—掌握三种控制器
上一篇文章中我们讲过了处理器的映射,接下来我们来一起学习下springmvc的控制器吧. 首先咱们先创建一个咱们用来测试的实体(model)类: package cn.cfs.springmvc.do ...
- SpringMVC实战(三种控制器方式)
1.前言 上篇博客着重说了一下SpringMVC中几种处理映射的方式,这篇博客来说一下SpringMVC中几种经常使用的控制器. 2.经常使用控制器 2.1 ParameterizableViewC ...
- 01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器
1 添加Spring MVC所需的jar包. 2 创建一个以下项目结构的springmvc项目 3 web.xml的配置如下: <?xmlversion="1.0"en ...
- 【iOS开发-30】UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序
一.UITabBarController的几种代理方法 在AppDelegate.h中加入一个协议<UITabBarControllerDelegate>.然后再AppDelegate.m ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- MVC控制器向View视图传值的三种方法
首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下:
- ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ...
- storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值
Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...
随机推荐
- web性能优化之---JavaScript中的无阻塞加载性能优化方案
一.js阻塞特性 JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任何事情,无论其代码是内嵌的还是外部的. 即<script>每次出现都会让页面等待脚本的解析和执 ...
- 阿里云部署Node.js项目(CentOS)
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- 使用svn无法cleanup和lock问题
step1: 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlite3.exe 找到 Precompiled Binaries for W ...
- 我在 Ubuntu 下使用 Sublime 编写 python 代码时遇到并解决的问题
Ubuntu 下 Sublime 无法输入中文 解决方法如下: sudo apt-get update && sudo apt-get upgrade 克隆项目到本地 : git cl ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- Web API对application/json内容类型的CORS支持
假设有一简单架构分为前后两部分,其一是Angular构成的前端页面站点,另一个则是通过ASP.NET Web API搭建的后端服务站点.两个站点因为分别布署,所有会有CORS(Cross-Origin ...
- matplotlib画散点图,并在散点处打上相应标签
运行环境: py3.6 matplotlib 2.1.2 x = [2,4,6,7,8,5,4,3] y = [3,6,5,8,4,3,2,4] txt = ['我','今','晚','上','吃', ...
- Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用
原文地址:http://www.javatang.com JVM Heap Dump(堆转储文件)的生成 正如Thread Dump文件记录了当时JVM中线程运行的情况一样,Heap Dump记录了J ...
- flowable设计器插件安装
原文地址:http://www.shareniu.com/ 工欲善其事必先利其器,要想使用flowable,必须搭建一套环境,本文以Eclipse中安装flowable插件为例详细说明整个安装过程. ...
- Dynamics CRM2016 关闭错误报告弹框提示
在之前的版本中错误报告的弹框提示是可以在隐私首选项中设置关闭的,如下图所示 但是在2016中这个设置没了 有人说在右上角的选项中设置,但那个只能是设置个人的无法修改系统级别的.在系统中找了半天还是没有 ...