A.需求
1.类似QQ、微信顶部或者底部的窗口转换导航条
2.给每个页面添加相应内容
 
B.UITabBarController
1.基本概念:
(1)内容高度
iOS7之前内容高度为:屏幕高度 - 状态栏高度44 - 底部导航条高度49
iOS7及之后,内容高度为整个屏幕
 
 
2.使用代码创建初始化
(1)创建一个UITabBarController
UITabBarController的使用步骤
  • 初始化UITabBarController
  • 设置UIWindow的rootViewController为UITabBarController
  • 根据具体情况,通过addChildViewController方法添加对应个数的子控制器
 
 
(2)添加子控制器
UITabBarController添加控制器的方式有2种
  • 添加单个子控制器
- (void)addChildViewController:(UIViewController *)childController;

  • 设置子控制器数组
@property(nonatomic,copy) NSArray *viewControllers;
 
 
如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件
如果UITabBarController有4个子控制器,那么UITabBar的结构大致如下图所示
 
 
AppDelegate:
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch. // 设置window
self.window = [[UIWindow alloc] init];
self.window.frame = [[UIScreen mainScreen] bounds];
self.window.backgroundColor = [UIColor grayColor];
[self.window makeKeyAndVisible]; // 设置一个UITabBarController
UITabBarController *tabBarController = [[UITabBarController alloc] init];
self.window.rootViewController = tabBarController; // 添加子控制器
UIViewController *c1 = [[UIViewController alloc] init];
c1.view.backgroundColor = [UIColor redColor];
// [tabBarController addChildViewController:c1]; UIViewController *c2 = [[UIViewController alloc] init];
c2.view.backgroundColor = [UIColor blueColor];
// [tabBarController addChildViewController:c2]; UIViewController *c3 = [[UIViewController alloc] init];
c3.view.backgroundColor = [UIColor greenColor]; tabBarController.viewControllers = @[c1,c2,c3]; return YES;
}
 
 
 
(3)设置导航条选项样式
UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性决定

UITabBarItem有以下属性影响着UITabBarButton的内容
标题文字
@property(nonatomic,copy) NSString *title;

图标
@property(nonatomic,retain) UIImage *image;

选中时的图标
@property(nonatomic,retain) UIImage *selectedImage;

提醒数字

@property(nonatomic,copy) NSString *badgeValue;
 
AppDelegate:
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch. // 设置window
self.window = [[UIWindow alloc] init];
self.window.frame = [[UIScreen mainScreen] bounds];
self.window.backgroundColor = [UIColor grayColor];
[self.window makeKeyAndVisible]; // 设置一个UITabBarController
UITabBarController *tabBarController = [[UITabBarController alloc] init];
self.window.rootViewController = tabBarController; // 添加子控制器
UIViewController *c1 = [[UIViewController alloc] init];
c1.view.backgroundColor = [UIColor redColor];
c1.tabBarItem.title = @"红色";
// [tabBarController addChildViewController:c1]; UIViewController *c2 = [[UIViewController alloc] init];
c2.view.backgroundColor = [UIColor blueColor];
c2.tabBarItem.title = @"蓝色";
// [tabBarController addChildViewController:c2]; UIViewController *c3 = [[UIViewController alloc] init];
c3.view.backgroundColor = [UIColor greenColor];
c3.tabBarItem.title = @"绿色"; tabBarController.viewControllers = @[c1,c2,c3]; return YES;
}
 
 
3.使用storyboard创建初始化
(1)拖入UITabBarController
(2)拖入N个UIViewController待用
(3)按照顺序连线,设置UITabBarController的子控制器
 
 
 
(4)设置子控制器的TabBarItem
 
out:
 
 
注意:Selected Image不设置,系统就会自动将原图编程蓝色作为 Selected Image
 
4.子控制器的生命周期
(1)单个子控制器的生命周期和普通的控制器生命周期一样
 
 - (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@ - viewDidLoad", self.class);
} - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"%@ - viewWillAppear", self.class);
} - (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%@ - viewDidAppear", self.class);
} - (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"%@ - viewWillDisappear", self.class);
} - (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"%@ - viewDidDisappear", self.class);
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"%@ - didReceiveMemoryWarning", self.class);
} - (void)viewWillUnload {
[super viewWillUnload];
NSLog(@"%@ - viewWillUnload", self.class);
} - (void)viewDidUnload {
[super viewDidUnload];
NSLog(@"%@ - viewDidUnload", self.class);
}
 
(2)两个子控制器切换的生命周期
a.出现第一个子控制器view
2014-12-27 21:11:44.338 UITabBarControllerByStoryboard[22567:590996] OneViewController - viewDidLoad
2014-12-27 21:11:44.340 UITabBarControllerByStoryboard[22567:590996] OneViewController - viewWillAppear
2014-12-27 21:11:44.407 UITabBarControllerByStoryboard[22567:590996] OneViewController - viewDidAppear
 
b.切换到第二个控制器view
2014-12-27 21:12:10.042 UITabBarControllerByStoryboard[22567:590996] TwoViewController - viewDidLoad
2014-12-27 21:12:10.042 UITabBarControllerByStoryboard[22567:590996] TwoViewController - viewWillAppear
2014-12-27 21:12:10.042 UITabBarControllerByStoryboard[22567:590996] OneViewController - viewWillDisappear
2014-12-27 21:12:10.054 UITabBarControllerByStoryboard[22567:590996] OneViewController - viewDidDisappear
2014-12-27 21:12:10.055 UITabBarControllerByStoryboard[22567:590996] TwoViewController - viewDidAppear
 
 
C.App框架
在每个子控制器之前再包装上一个NavigationController
 
 
 
 
 
 
 
 

[iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理的更多相关文章

  1. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  2. [iOS基础控件 - 6.12.3] @property属性 strong weak copy

    A.概念 @property 的修饰词   strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign)   默认情况所有指针都是强指针 ...

  3. [iOS基础控件 - 6.12.2] Modal

    A.概念 1.也可以用来切换控制器 2.如ActionSheet   除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展示出来 Modal的默认效果 ...

  4. [iOS基础控件 - 6.12.4] NavigationController vs TabBarController

    A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonI ...

  5. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  6. [iOS基础控件 - 3.1] QQ登陆界面

      A.storyboard 控件版 1.label 2.textfield      a.Keyboard Type           账号:Number Pad           密码:Num ...

  7. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  8. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  9. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

随机推荐

  1. C++ STL之deque的基本操作

    前两篇博文中已经介绍了vector和list的两种容器,我们发现他们各有各的优缺点,vector在内存中连续存储,支持随机访问,但是查找和删除的效率比较低,而list在内存中是链式存储的查找和删除的效 ...

  2. Effective C++学习笔记 条款04:确定对象被使用前已先被初始化

    一.为内置类型对象进行手工初始化,因为C++不保证初始化它们. 二.对象初始化数据成员是在进入构造函数用户编写代码前完成,要想对数据成员指定初始化值,那就必须使用初始化列表. class A { pu ...

  3. Qt之自定义界面(窗体缩放-跨平台终极版)

    简述 通过上一节内容,我们实现了窗体的缩放,功能很不错,但是很遗憾-不支持跨平台!如果对于多平台来说,这是一个硬伤,所以,我们急需要一个能够支持跨平台的实现方案. 在网上看到过很多不同的实现方式,多多 ...

  4. BZOJ_1028_[JSOI2007]_麻将_(模拟+贪心)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1028 同一种花色的牌,序数为\(1,2,...,n\).定义"和了"为手上 ...

  5. jquery获取div距离顶部的距离

    获取元素到页面顶部距离的语句为: 1.jquery写法:$(“#divID”).offset().top //推荐 $("#vertical").position().top 2. ...

  6. 【Mysql】安装 mysql-5.7.5 指南

    因为同学需要安装mysql,安装过程,一路百度,在这里记录一下步奏.以后还会用到. 1.mysql-5.7.5-m15-winx64.zip下载 官方网站下载地址:http://cdn.mysql.c ...

  7. java 访问器方法中对象引用的问题

    "注意不要编写返回引用可变对象的访问器方法".因为会破坏类的封装性,引用的内容可能会被改变,产生业务逻辑上的错误. 什么是可变对象? 先要搞清楚java中值传递和引用传递的问题,总结如下: 1.对象就 ...

  8. POJ 3744 Scout YYF I (概率dp+矩阵快速幂)

    题意: 一条路上,给出n地雷的位置,人起始位置在1,向前走一步的概率p,走两步的概率1-p,踩到地雷就死了,求安全通过这条路的概率. 分析: 如果不考虑地雷的情况,dp[i],表示到达i位置的概率,d ...

  9. CodeForces 54C-First Digit Law(数位,概率dp)

    题意: 给你n个区间,在每个区间里各取一个数(随机取),求这n个数中超过K%的数是首位为1数的概率 分析: dp[i][j]取前i个数,有j个是首位为1的数的概率 易知,dp[i][j]=dp[i-1 ...

  10. 《Python CookBook2》 第一章 文本 - 每次处理一个字符 && 字符和字符值之间的转换

    文本 - 总结: 什么是文本Python 中的string 类型是不可变类型.文本,一个字符的矩阵,每一个单独的文本快可以被缩进和组织起来. 基本的文本操作①解析数据并将数据放入程序内部的结构中:②将 ...