• iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)


    iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)
     
    一、UITabBarController在storyoard中得搭建
    1.新建一个项目,把storyboard中默认的控制器删除,拖UITab Bar Controller。
    2.创建viewcontroller,添加到UITab Bar Controller中去(连线)。
    注意点:连线的顺序就是将来显示的顺序,显示在眼前的为第一个连线的view。
    提示:控制器的界面对应的tabbarbutton和图片显示什么内容,由它的控制器确定。
    3.设置子控制器的UITabBar等信息。 
    4.运行效果
     
    二、UITabBarController的生命周期演示
    思路:新建三个控制器类来对控制器进行分别管理,重写内部的生命周期方法就可以了解UITabBarController内部管理机制。
     
    分析代码:
     1 #import "TXAppDelegate.h"
     2 
     3 @implementation TXAppDelegate
     4 
     5 /**
     6  *  app加载完毕的时候调用(一般只调用一次)
     7  *
     8  */
     9 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    10 {
    11     NSLog(@"didFinishLaunchingWithOptions");
    12     return YES;
    13 }
    14 
    15 /**
    16  *  app失去焦点的时候调用(UI控件不能正常使用)
    17  */
    18 - (void)applicationWillResignActive:(UIApplication *)application
    19 {
    20     NSLog(@"applicationWillResignActive");
    21 }
    22 
    23 /**
    24  *  app进入后台的时候调用(app消失不见)
    25  */
    26 - (void)applicationDidEnterBackground:(UIApplication *)application
    27 {
    28     NSLog(@"applicationDidEnterBackground");
    29 }
    30 
    31 /**
    32  *  app进入前台的时候调用(app显示出来)
    33  */
    34 - (void)applicationWillEnterForeground:(UIApplication *)application
    35 {
    36     NSLog(@"applicationWillEnterForeground");
    37 }
    38 
    39 /**
    40  *  当app获得焦点的时候调用(这时候整个app的UI控件都能正常使用)
    41  */
    42 - (void)applicationDidBecomeActive:(UIApplication *)application
    43 {
    44 //    UITabBarController *tabbarVc = (UITabBarController *)self.window.rootViewController;
    45 //    NSLog(@"%@", NSStringFromCGRect(tabbarVc.tabBar.frame));
    46     
    47 //    for (UIView *child in tabbarVc.tabBar.subviews) {
    48 //        if ([child isKindOfClass:[UIImageView class]]) {
    49 //            [child removeFromSuperview];
    50 //        }
    51 //    }
    52     NSLog(@"applicationDidBecomeActive");
    53 }
    54 
    55 //app进入后台:休眠,  不能接受事情(比如关闭)
    56 /**
    57  *  app关闭的时候调用(一般情况下不会调用)
    58  */
    59 - (void)applicationWillTerminate:(UIApplication *)application
    60 {
    61     NSLog(@"applicationWillTerminate");
    62 }
    63 
    64 @end
    (1)运行程序,打印输出为:
    说明:当把三个子控制器都添加给UITabBarController来管理后,当程序启动时它只会加载第一个添加的控制器的view。
    (2)点击联系人按钮,切换到第二个界面。打印输出为:
    说明:先把第一个view移开,再把新的view添加上去,但是第一个view并没有被销毁。
    (3)重新点击消息界面,打印如下:
    说明:先重新切换到消息界面,one控制器直接即将显示,没有进行加载证明了(2)中第一个view移除后并没有被销毁(因为它的控制器还存在,有一个强引用引用着它),且two的view移除后也没有被销毁。无论怎么切换,控制器和view都不会被销毁。
    UINavigationController和UITabBarController一个通过栈来管理,一个通过普通的数组来进行管理。
     
    补充说明:UITabBarController中的UITabBar实际高度为49.
    在Application的下面方法中打印UITabBar的frame进行查看。
     

    打印结果为:

  • 相关阅读:
    Java学习笔记-Lambda表达式
    Java学习笔记-枚举类
    Java学习笔记-枚举类
    Java学习笔记-包装类
    js 递归 汉诺塔的例子
    js 用 hasOwnProperty() 判定属性是来自该对象成员,还是原型链
    正则,js函数math()提取混乱字符串中多个字符串内容
    封装好的cookie的三个常用函数 cookie的添加、删除、提取操作函数
    解决ie6下png背景不能透明bug
    ie6下标签定义的高失效,显示的高不受设定的height值影响
  • 原文地址:https://www.cnblogs.com/asd5551680/p/4069934.html
Copyright © 2020-2023  润新知