第一部分:UITabBarController
 标签视图控制器

 UITabBarController
 标签视图控制器继承自UIViewController,一经创建自带一个视图,这个视图上有两个控件
contentView 和tabBar
,是用来管理多个单视图控制器,他管理的多个单视图控制器之间是并列关系,同时存在,但是相互之间没有太大关联
 
  
   
 UITabBarController  
管理的视图控制器对象自带的View只有当它第一次出现的时候会创建,以后就不再创建,所以标签视图控制器管理的视图控制器之间是并列存在的
所需背景图片:
本节所需素材下载:http://pan.baidu.com/s/1kTmzYTp
 
 
==========================================================
AppDelegate.m
#import "FirstViewController.h"

#import "SecondViewController.h"

#import "ThirdViewController.h"

#import "FifthViewController.h"

#import "ForthViewController.h"

#import "SixthViewController.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;

}
效果:






——————————————————————————————
FirstViewController.m
 
  使用UITabBarController
管理的视图的之间的切换,走的哪些方法?
A-->B :
B将要出现-->A将要消失-->A已经消失-->B已经出现
B-->A :
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已经消失");

}
 SecondViewController.h
和FirstViewController.h 一样只需把背景颜色设置一下即可ThirdViewController.m
、FifthViewController.m、ForthViewController.m、SixthViewController.m不做详细介绍只需继承自
UIViewController设置背景颜色即可。
——————————————————————————————
   
 UITabBarController 
管理的标签超过5个的时候,会自动生成more按钮,more对应视图控制器是导航控制器,多出来的视图都被导航控制器管理
 
 
===================================================

   
第二部分:MixUserControllers 控制器的混合使用
UITabBarController、UINavigationController、UITableViewController的混合使用

 
UITabBarController素材下载: http://pan.baidu.com/s/1kTvnyT5

AppDelegate.m

//创建标签视图控制器对象

NBViewController
*nbVC =
[[NBViewController
alloc]init];

//将标签视图控制器对象指定为window的根视图控制器

self.window.rootViewController
= nbVC;

   
[nbVC release];
——————————————————————————————

NBViewController.m

#import
"ChatViewController.h"

#import "ContactViewController.h"

#import "FindViewController.h"

#import
"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];
}
——————————————————————————————————
继承自: UITableViewController

ChatViewController.m

#define
kTableCell @"table-cell"
#import
"DetailViewController.h"

   
//注册cell

[self.tableView
registerClass:[UITableViewCell
class]
forCellReuseIdentifier:kTableCell];

//1.访问到当前管理该视图的导航控制器(最近的)

self.navigationController;

//2.访问到当前管理该视图的标签栏控制器(最近)

self.tabBarController;

//3.访问到当前管理该视图控制器的导航控制器所管理偶的所有视图控制器

self.navigationController.viewControllers;

//4.访问到当前管理该视图控制器的标签视图控制器所管理的所有的视图控制器

   
self.tabBarController.viewControllers;
}


- (NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView
{
   
return
1;

}


- (NSInteger)tableView:(UITableView
*)tableView
numberOfRowsInSection:(NSInteger)section
{
   
return
10;

}


- (UITableViewCell
*)tableView:(UITableView
*)tableView
cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
   
UITableViewCell
*cell =
[tableView dequeueReusableCellWithIdentifier:kTableCell
forIndexPath:indexPath];
   
cell.textLabel.text
=
@"在和习大大聊天";
   
return
cell;
}

//点击cell会走的方法

- (void)tableView:(UITableView
*)tableView
didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{

//创建detailViewController对象

//创建UITableViewController子类时可以指定自带的tableView的格式是plain还是group样式的;

   
DetailViewController
*detailVC =
[[DetailViewController
alloc]initWithStyle:(UITableViewStyleGrouped)];
需要注意的一点:显示和隐藏标签栏分别在push前后
   
//跳转时是否隐藏标签栏
   
self.hidesBottomBarWhenPushed
=
YES;
   
[self.navigationController
pushViewController:detailVC
animated:YES];

//跳转返回时显示标签栏

self.hidesBottomBarWhenPushed
=
NO;

   
[detailVC release];
}
IOS中如何在多层界面之间显示与隐藏标签栏(UITabBar): http://blog.sina.com.cn/s/blog_814ecfa90102vx5o.html
————————————————————————————————
ChatViewController.m、ContactViewController.m、FindViewController.m、MineViewController.m
同理继承自: UITableViewController
创建没有设置内容
————————————————————————————————
最终效果:



==========================================================================
欢迎学习本文,未经博主许可,禁止转载!

UITabBarController及三种控制器的…的更多相关文章

  1. springmvc基础篇—掌握三种控制器

    上一篇文章中我们讲过了处理器的映射,接下来我们来一起学习下springmvc的控制器吧. 首先咱们先创建一个咱们用来测试的实体(model)类: package cn.cfs.springmvc.do ...

  2. SpringMVC实战(三种控制器方式)

    1.前言 上篇博客着重说了一下SpringMVC中几种处理映射的方式,这篇博客来说一下SpringMVC中几种经常使用的控制器.  2.经常使用控制器 2.1 ParameterizableViewC ...

  3. 01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器

     1 添加Spring MVC所需的jar包. 2 创建一个以下项目结构的springmvc项目 3 web.xml的配置如下: <?xmlversion="1.0"en ...

  4. 【iOS开发-30】UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序

    一.UITabBarController的几种代理方法 在AppDelegate.h中加入一个协议<UITabBarControllerDelegate>.然后再AppDelegate.m ...

  5. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  6. MVC控制器向View视图传值的三种方法

    首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下:

  7. ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

    http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...

  8. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  9. storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值

    Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...

随机推荐

  1. 阿里架构师带你深入浅出jvm

    本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine ...

  2. oracle拆分一个连续的字符串

    create or replace procedure pc(  sss out varchar2)isstr varchar2(20):='ph,p,cod,do,cu';en integer:=i ...

  3. centos6 安装redis-4.0.9

    从redis官网下载Linux redis4.0.9版本,我下载的redis-4.0.9.tar.gz(目前最新稳定版),下载到/usr/local/src目录,如果没有就mkdir创建一个. 下载链 ...

  4. JavaScript 函数定义

    JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function function ...

  5. JavaSE基础问答

    1.JAVA的基本数据类型有哪些? JAVA的基本数据类型分为4类8种,就是整形 byte.short.int.long.浮点型 float 跟double,字符型 char,跟布尔型 true和 f ...

  6. Eclipse调试(2)——各种类型断点设置

    本文是Eclipse调试(1)--基础篇 的提高篇.分两个部分: 1) Debug视图下的3个小窗口视图:变量视图.断点视图和表达式视图 2) 设置各种类型的断点 变量视图.断点视图和表达式视图 1. ...

  7. self关键字

    self关键字 self:当前类/对象的指针(指向当前对象/方法调用者) 作用1 当类里有变量名和成员变量名一样的时候,可以使用self区分 例: 我们写一个人的类,有一个年龄属性,在get方法里,我 ...

  8. Cassandra User 问题汇总(1)------------repair

    Cassandra Repair 问题 问1: 文档建议每周或者每月跑一次full repair.那么如果我是使用partition rangerepair,是否还有必要在cluster的每个节点上定 ...

  9. ROS机器人程序设计-学习小结-

    ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...

  10. EBS开发性能优化之查找需要优化的程序

    1.登陆数据库LINUX环境 使用 top 命令查看进程状况 [oratest@ebsdb~]$top top - 15:58:59 up 8 days, 22:04,  1 user,  load ...