第一部分: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. Lucene——Field.Store(存储域选项)及Field.Index(索引选项)

    Field.Store.YES或者NO(存储域选项) 设置为YES表示或把这个域中的内容完全存储到文件中,方便进行文本的还原 设置为NO表示把这个域的内容不存储到文件中,但是可以被索引,此时内容无法完 ...

  2. jmeter录制APP时不能登录的问题

    问题描述: 录制APP时,其他一切挺顺利的,但在登录的时候提示"服务器发生未知错误,请稍后重试".一开始以为是接口问题,用python脚本调用了下,是可以登录的,排除接口问题.百度 ...

  3. python 的字符串驻留机制

    我们都知道python中的引用计数机制,相同对象的引用其实都是指向内存中的同一个位置,这个也叫做“python的字符串驻留机制”.其他的就不多说了,自行研究. 重点!!!!!! python的引用计数 ...

  4. Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence

    [题意概述] 找两个字符串的最长不公共子串. [题目分析] 两个字符串的最长不公共子串就应该是其中一个字符串本身,那么判断两个字符串是否相等,如果相等,那么肯定没有公共子串,输出"-1&qu ...

  5. MongoDB 监控

    在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. MongoDB中提供了m ...

  6. Tomcat中的c3p0数据库连接池的释放

    一个项目通过c3p0获得连接池,相关代码如下: public class JdbcUtil { // 连接池的核心类 private static ComboPooledDataSource data ...

  7. mybatis映射器配置细则

    前面三篇博客我们已经多次涉及到映射器的使用了,增删查基本上都用过一遍了,但是之前我们只是介绍了基本用法,实际上mybatis中映射器可以配置的地方还是非常多,今天我们就先来看看映射器还有哪些需要配置的 ...

  8. Spring Security安全框架入门篇

    一.Spring Security相关概念 1.1..Spring Security介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安 ...

  9. 剑指Offer——知识点储备-网络基础

    剑指Offer--知识点储备-网络基础 计算机网络 http和https的区别 (1)http是http协议运行在tcp之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份. (2)htt ...

  10. (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)

    接下来,我们再讲一下图文消息: 如图: 大家可以先从开发者文档中了解一下图文消息的一些参数: 如上图,用户回复4时,ipastor返回了几条图文消息,上图中属于多图文消息,当然还有单图文消息,图文消息 ...