【iOS基础控件 15 - 2 】 UITabBarController 控制器管理

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:

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     // Override point for customization after application launch.
 3
 4     // 设置window
 5     self.window = [[UIWindow alloc] init];
 6     self.window.frame = [[UIScreen mainScreen] bounds];
 7     self.window.backgroundColor = [UIColor grayColor];
 8     [self.window makeKeyAndVisible];
 9
10
11     // 设置一个UITabBarController
12     UITabBarController *tabBarController = [[UITabBarController alloc] init];
13     self.window.rootViewController = tabBarController;
14
15     // 添加子控制器
16     UIViewController *c1 = [[UIViewController alloc] init];
17     c1.view.backgroundColor = [UIColor redColor];
18 //    [tabBarController addChildViewController:c1];
19
20     UIViewController *c2 = [[UIViewController alloc] init];
21     c2.view.backgroundColor = [UIColor blueColor];
22 //    [tabBarController addChildViewController:c2];
23
24     UIViewController *c3 = [[UIViewController alloc] init];
25     c3.view.backgroundColor = [UIColor greenColor];
26
27     tabBarController.viewControllers = @[c1,c2,c3];
28
29
30     return YES;
31 }

(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:

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     // Override point for customization after application launch.
 3
 4     // 设置window
 5     self.window = [[UIWindow alloc] init];
 6     self.window.frame = [[UIScreen mainScreen] bounds];
 7     self.window.backgroundColor = [UIColor grayColor];
 8     [self.window makeKeyAndVisible];
 9
10
11     // 设置一个UITabBarController
12     UITabBarController *tabBarController = [[UITabBarController alloc] init];
13     self.window.rootViewController = tabBarController;
14
15     // 添加子控制器
16     UIViewController *c1 = [[UIViewController alloc] init];
17     c1.view.backgroundColor = [UIColor redColor];
18     c1.tabBarItem.title = @"红色";
19 //    [tabBarController addChildViewController:c1];
20
21     UIViewController *c2 = [[UIViewController alloc] init];
22     c2.view.backgroundColor = [UIColor blueColor];
23     c2.tabBarItem.title = @"蓝色";
24 //    [tabBarController addChildViewController:c2];
25
26     UIViewController *c3 = [[UIViewController alloc] init];
27     c3.view.backgroundColor = [UIColor greenColor];
28     c3.tabBarItem.title = @"绿色";
29
30     tabBarController.viewControllers = @[c1,c2,c3];
31
32
33     return YES;
34 }

3.使用storyboard创建初始化

(1)拖入UITabBarController

(2)拖入N个UIViewController待用

(3)按照顺序连线,设置UITabBarController的子控制器

(4)设置子控制器的TabBarItem

out:

注意:Selected Image不设置,系统就会自动将原图编程蓝色作为 Selected Image

4.子控制器的生命周期

(1)单个子控制器的生命周期和普通的控制器生命周期一样

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     NSLog(@"%@ - viewDidLoad", self.class);
 4 }
 5
 6 - (void)viewWillAppear:(BOOL)animated {
 7     [super viewWillAppear:animated];
 8     NSLog(@"%@ - viewWillAppear", self.class);
 9 }
10
11 - (void)viewDidAppear:(BOOL)animated {
12     [super viewDidAppear:animated];
13     NSLog(@"%@ - viewDidAppear", self.class);
14 }
15
16 - (void) viewWillDisappear:(BOOL)animated {
17     [super viewWillDisappear:animated];
18     NSLog(@"%@ - viewWillDisappear", self.class);
19 }
20
21 - (void)viewDidDisappear:(BOOL)animated {
22     [super viewDidDisappear:animated];
23     NSLog(@"%@ - viewDidDisappear", self.class);
24 }
25
26
27 - (void)didReceiveMemoryWarning {
28     [super didReceiveMemoryWarning];
29     NSLog(@"%@ - didReceiveMemoryWarning", self.class);
30 }
31
32 - (void)viewWillUnload {
33     [super viewWillUnload];
34     NSLog(@"%@ - viewWillUnload", self.class);
35 }
36
37 - (void)viewDidUnload {
38     [super viewDidUnload];
39     NSLog(@"%@ - viewDidUnload", self.class);
40 }

(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

时间: 2024-10-02 07:05:59

【iOS基础控件 15 - 2 】 UITabBarController 控制器管理的相关文章

【iOS基础控件 - 15】- UINavigationController 多控制器 简单使用

A.概念 1.通常一个app有多个控制器 2.需要对这些控制器进行管理 3.有多个view的时候,用一个父view去管理多个子view 4.控制器管理也是如此,使用给一个父控制器,去控制子控制器 为了方便管理控制器,系统提供了两个控制器 UINavigationController UITabBarController B.UINavigationController的使用 UINavigationController的使用步骤初始化UINavigationController设置UIWindo

[iOS基础控件 6.11.1] - 控制器 & 控制器view

A.控制器的创建 控制器常见的创建方式有以下几种通过storyboard创建 直接创建 1 ViewController *vc = [[ViewController alloc] init]; xib设置了class后,当xib的文件名跟controller类名一样的时候,用这个方法默认就会加载xib中的controller 指定xib文件来创建 1 ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewContr

【iOS基础控件 -15 - 3 】Modal

A.概念 1.也可以用来切换控制器 2.如ActionSheet 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展示出来 Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止 以Modal的形式展示控制器- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(vo

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

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

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

A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用 B.实现步骤 1.准备plist文件和国旗图片 2.创建模型 1 // 2 // Flag.h 3 // CountriesSelection 4 // 5 // Created by hellovoidworld on 14/12/16. 6 // Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8 9 #import <Foun

[iOS基础控件 - 5.4] 广告分页代码(UIScrollView制作)

A.概念 例子就是桌面的APP列表,当APP数量超过一个屏幕,自动进行分页 B.实现思路 1.创建一个UIScrollView,这里设置为宽度跟屏幕相同,高度1/4屏幕高度左右 2.使用代码在UIScrollView中添加ImageView,横向放入多张ImageView 3.设置UIScrollView的contentSize为所有图片的宽度总和 4.要保证UIScrollView的宽度等于一张ImageView的宽度,才能正确分页 C.相关属性 设置属性pageEnable = YES,UI

ios基础控件之开关按钮(UISwitch)

UISwitch控件是iOS开发的基础控件,是非常简单的一个控件,因为它的方法比较少.UISwitch继承于UIControl基类,因此可以当成活动控件使用. 注意:开关状态通过它的on属性进行读取,该属性是一个BOOL属性 创建: UISwitch* mySwitch = [[ UISwitch alloc]initWithFrame:CGRectMake(0.150.0f,100.0f,0.0f,0.0f)]; 可能你会疑问为什么它的大小都设置为0?没错,它的大小你设置是无效的,系统会为你分

[iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理

A.需求 1.类似QQ.微信顶部或者底部的窗口转换导航条 2.给每个页面添加相应内容 B.UITabBarController 1.基本概念: (1)内容高度 iOS7之前内容高度为:屏幕高度 - 状态栏高度44 - 底部导航条高度49 iOS7及之后,内容高度为整个屏幕 2.使用代码创建初始化 (1)创建一个UITabBarController UITabBarController的使用步骤 初始化UITabBarController 设置UIWindow的rootViewController