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 ...
随机推荐
- Python小代码_8_今天是今年的第几天
import time date = time.localtime() print(date) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24 ...
- 转载c++常忘的知识点
C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...
- IPFS星际文件系统
IPFS星际文件系统(InterPlanetary File System)是去中心化文件系统,本文介绍IPFS节点软件系统安装,环境搭建等简介入门教程,及学习如何使用ipfs-api和Node.js ...
- ACM Ignatius and the Princess II
Problem Description Now our hero finds the door to the BEelzebub feng5166. He opens the door and fin ...
- 苹果OS系统安装Xcode方法
打开Xcode系统,在app store 里面找到自己系统对应的可升级的Xcode版本进行下载,下载到本地后,设置存放Xcode存放的文件夹为共享文件夹. 在MAC OS共享文件夹里面找到Xcode安 ...
- JavaScript Window Navigator
window.navigator 对象包含有关访问者浏览器的信息. Window Navigator window.navigator 对象在编写时可不使用 window 这个前缀. 实例 <d ...
- Linux下的有用命令
在之前的博客<Linux下常用命令与使用技巧>中,介绍了Linux的常用命令,在今天的博客中,给大家介绍其他的有用命令. 1.文本转换命令 在Linux下工作,我们不可避免地要和文件格式做 ...
- Nginx之(三)Nginx配置
一个简单的配置文件如下: #定义Nginx运行的用户及用户组 user userName userGroupName; #工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU worker_ ...
- OC基础之推荐一个旋转木马(跑马灯)效果的图片展示Demo
这个旋转木马(跑马灯)效果的图片展示Demo,包括设定旋转方向,图片倒影,背景设置,旋转速度,开始结束,点击显示选中的图片,彩色的块展示等等功能 效果图:(源码下载:https://github.co ...
- Swift中如何化简标准库中冗长的类实例初始化代码
可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let share ...