1. 程式人生 > >iOS開發UI篇—UITabBarController生命周期(使用storyoard搭建)

iOS開發UI篇—UITabBarController生命周期(使用storyoard搭建)

信息 運行 默認 設置 tex tar inter one 引用

iOS開發UI篇—UITabBarController生命周期(使用storyoard搭建)

一、UITabBarController在storyoard中得搭建

1.新建一個項目,把storyboard中默認的控制器刪除,拖UITab Bar Controller。

2.創建viewcontroller,添加到UITab Bar Controller中去(連線)。

技術分享圖片

註意點:連線的順序就是將來顯示的順序,顯示在眼前的為第一個連線的view。

提示:控制器的界面對應的tabbarbutton和圖片顯示什麽內容,由它的控制器確定。

3.設置子控制器的UITabBar等信息。

技術分享圖片

4.運行效果

技術分享圖片

二、UITabBarController的生命周期演示

思路:新建三個控制器類來對控制器進行分別管理,重寫內部的生命周期方法就可以了解UITabBarController內部管理機制。

分析代碼:

 1 //
 2 //  YYbaseViewController.m
 3 //  02-uitabbarcontroller
 4 //
 5 //  Created by 孔醫己 on 14-6-8.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8 
 9 #import "YYbaseViewController.h"
10 
11 @interface YYbaseViewController ()
12 
13 @end
14 
15 @implementation YYbaseViewController
16 
17 // 當控制器的view加載完畢就調用
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21     NSLog(@"%@ -  控制器的view加載完畢", [self class]);
22 }
23 
24 // 控制器即將顯示的時候調用
25 - (void)viewWillAppear:(BOOL)animated
26 {
27     [super viewWillAppear:YES];
28     NSLog(@"%@ -  控制器即將顯示", [self class]);
29 }
30 
31 // 控制器完全顯示的時候調用
32 - (void)viewDidAppear:(BOOL)animated
33 {
34     [super viewDidAppear:animated];
35     NSLog(@"%@ -  控制器完全顯示", [self class]);
36 }
37 
38 // 控制器即將消失的時候調用
39 - (void)viewWillDisappear:(BOOL)animated
40 {
41     [super viewWillDisappear:animated];
42     NSLog(@"%@ -  控制器即將消失", [self class]);
43 }
44 // 控制器完全消失的時候調用
45 - (void)viewDidDisappear:(BOOL)animated
46 {
47     [super viewDidDisappear:animated];
48     NSLog(@"%@ -  控制器完全消失", [self class]);
49 }
50 
51 - (void)viewWillUnload
52 {
53     [super viewWillUnload];
54     NSLog(@"%@ -  view即將被銷毀", [self class]);
55 }
56 
57 - (void)viewDidUnload
58 {
59     [super viewDidUnload];
60     NSLog(@"%@ -  view完全被銷毀", [self class]);
61 }
62 
63 - (void)dealloc
64 {
65     NSLog(@"%@",  [self class]);
66 }
67 
68 @end

(1)運行程序,打印輸出為:

技術分享圖片

說明:當把三個子控制器都添加給UITabBarController來管理後,當程序啟動時它只會加載第一個添加的控制器的view。

(2)點擊聯系人按鈕,切換到第二個界面。打印輸出為:

技術分享圖片

說明:先把第一個view移開,再把新的view添加上去,但是第一個view並沒有被銷毀。

(3)重新點擊消息界面,打印如下:

技術分享圖片

說明:先重新切換到消息界面,one控制器直接即將顯示,沒有進行加載證明了(2)中第一個view移除後並沒有被銷毀(因為它的控制器還存在,有一個強引用引用著它),且two的view移除後也沒有被銷毀。無論怎麽切換,控制器和view都不會被銷毀。

UINavigationController和UITabBarController一個通過棧來管理,一個通過普通的數組來進行管理。

補充說明:UITabBarController中的UITabBar實際高度為49.

在Application的下面方法中打印UITabBar的frame進行查看。

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    UITabBarController *tb=(UITabBarController*)self.window.rootViewController;
    NSLog(@"%@",NSStringFromCGRect(tb.tabBar.frame));
}

打印結果為:

技術分享圖片

iOS開發UI篇—UITabBarController生命周期(使用storyoard搭建)