iOS10 UI教程视图的生命周期

说到视图的生命周期一般都是指视图控制器的视图生命周期。在视图的声明周期中最主要的有8个方法,分别为loadView()、viewDidLoad()、viewWillAppear(_:)、viewWillLayoutSubviews()、viewDidLayoutSubviews()、viewDidAppear(_:)、viewWillDisappear(_:)、viewDidDisappear(_:),对于这几个方法的说明如表1-5所示。视图的生命周期的流程以及这些方法的调用时机如图1.29所示。

表1-5  方法介绍

方法

功能

loadView()

载入视图,通常这一步不需要去干涉。

viewDidLoad()

载入完成,可以进行自定义数据以及动态创建其他控件

viewWillAppear(_:)

视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

viewWillLayoutSubviews()

即将开始子视图位置布局

viewDidLayoutSubviews()

用于通知视图的位置布局已经完成

viewDidAppear(_:)

视图已在屏幕上渲染完成

viewWillDisappear(_:)

视图即将消失

viewDidDisappear(_:)

视图已经消失

 

图1.29  生命周期

注意:在图中给出了这些方法的调用顺序,当然需要注意这几个方法的调用是由iOS系统决定的,不需要读者自己调用。

【示例1-12:LifeCycle】以下将使用代码说明视图的生命周期中方法的执行顺序。具体的操作步骤如下:

(1打开Main.storyboard文件,从视图库中拖动Button按钮控件到主视图中,将Button的标题改为“移除视图”。

(2将Button按钮控件进行动作removeView的声明和关联。

(3打开ViewController.swift文件,编写代码,通过输出语句查看视图生命周期中方法的顺序。代码如下:

import UIKit

class ViewController: UIViewController {

    //载入完成

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

         print("viewDidLoad")

}

//轻拍按钮,移除视图控制器的视图

    @IBAction func removeView(_ sender: AnyObject) {

         view.removeFromSuperview()

}

//载入视图

    override func loadView() {

        super.loadView()

        print("LoadView")

}

//视图将出现在屏幕之前

    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(true)

        print("viewWillAppear")

}

//视图已在屏幕上渲染完成

    override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(true)

        print("viewDidAppear")

}

//即将开始子视图位置布局

    override func viewWillLayoutSubviews() {

        super.viewWillLayoutSubviews()

        print("viewWillLayoutSubviews")

}

//视图的位置布局已经完成

    override func viewDidLayoutSubviews() {

        super.viewDidLayoutSubviews()

        print("viewDidLayoutSubviews")

}

//视图即将消失

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(true)

        print("viewWillDisappear")

}

//视图已经消失

    override func viewDidDisappear(_ animated: Bool) {

        super.viewDidDisappear(true)

        print("viewDidDisappear")

    }

……

}

  

此时运行程序,会看到如图1.30所示的效果。不仅如此,还会在应用程序输出窗口输出以下内容:

LoadView

viewDidLoad

viewWillAppear

viewWillLayoutSubviews

viewDidLayoutSubviews

viewDidAppear

  

当开发者轻拍“移除视图”按钮后,会看到视图控制器的主视图被移除,如图1.31所示。不仅如此,还会在应用程序输出窗口输出以下内容:

viewWillDisappear

viewDidDisappear

  

 

图1.30  初始状态                           图1.31  移除主视图

iOS10 UI教程视图的生命周期

相关阅读:iOS10 UI教程视图的绘制与视图控制器和视图

iOS10 UI教程视图的生命周期的更多相关文章

  1. iOS10 UI教程视图的绘制与视图控制器和视图

    iOS10 UI教程视图的绘制与视图控制器和视图 iOS10 UI视图的绘制 iOS10 UI教程视图的绘制与视图控制器和视图,在iOS中,有很多的绘图应用.这些应用大多是在UIView上进行绘制的. ...

  2. iOS10 UI教程视图调试

    iOS10 UI教程视图调试 iOS10 UI教程视图调试,当视图很复杂的时候,层次结构就不会很简单了.Xcode可以通过视图(View)调试帮助开发者解决层次结构复杂的问题.视图调试是在Xcode ...

  3. iOS10 UI教程视图和子视图的可见性

    iOS10 UI教程视图和子视图的可见性 iOS10 UI教程视图和子视图的可见性,一个父视图可以通过clipsToBounds属性,定义子视图在边界(边界就是父视图的框架也就是父视图可以显示的范围) ...

  4. iOS10 UI教程视图的中心位置

    iOS10 UI教程视图的中心位置 center表示的是视图的中心位置属性,这个属性在相对的UI层次结构上工作,和frame类似.center属性是一个在父视图上定义视图的位置的简便方法.center ...

  5. iOS10 UI教程视图的边界与视图的框架

    iOS10 UI教程视图的边界与视图的框架 iOS10 UI视图的边界 在视图的几何形状中我们提到了视图属性中的一部分属性可以将定义的视图绘制在屏幕上.其中典型的3个属性为边界属性.框架属性以及中心位 ...

  6. iOS10 UI教程视图的几何形状

    iOS10 UI教程视图的几何形状 视图属性中的一部分属性可以让定义的视图绘制在屏幕上.在讲解这些属性前,我们首先将讲解,定义视图的几何形状所涉及到的结构类型.这些结构类型如下: CGPoint:它表 ...

  7. iOS10 UI教程子视图和父视图UI层次结构和Views继承

    iOS10 UI教程子视图和父视图UI层次结构和Views继承 iOS10 UI教程子视图和父视图UI层次结构和Views继承,本节将讲解与UI层次结构和Views继承相关的内容,其中包括子视图和父视 ...

  8. iOS10 UI教程基改变视图的外观与视图的可见性

    iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...

  9. iOS10 UI教程层次结构的事件

    iOS10 UI教程层次结构的事件 iOS10 UI教程层次结构的事件,层次结构中存在7个事件,对于这些事件的介绍如表1-3所示.通过这些事件,可以监听视图,当视图在层次结构上发生变化时可以被拦截,也 ...

随机推荐

  1. ibatis中使用like模糊查询

    select * from table1 where name like '%#name#%' 两种有效的方法: 1) 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入 ...

  2. QtCreator 添加第三方头文件库文件路径

    打开工程名.pro文件 添加 INCLUDEPATH += $$PWD/../../Obelisk/thirdparty/prebuilt/include/LeapSDKOrion LIBS += - ...

  3. [Usaco2015 Feb]Censoring(bzoj 3942)

    Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...

  4. qt_文本编辑器实现_附带详细注释和源码下载

    源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...

  5. Codeforces Round #327 (Div. 2)B(逻辑)

    B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. MVC基础知识 – 2.新语法

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 ...

  7. 【译】DotNet 5.4或者说 .NET平台标准

    原文:DotNet 5.4 or .NET Platform Standards 是的,你看到的确实是"DotNet 5.4".使用Visual Studio 2015 RC1 u ...

  8. TortoiseSVN常用操作说明

    TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseS ...

  9. 消息队列通信,王明学learn

    消息队列通信 消息队列就是一个消息(一个结构)的链表.而一条消息则可看作一个记录,具有特定的格式.进程可以从中按照一定的规则添加新消息:另一些进程则可以从消息队列中读走消息. 每一个消息都是一个结构体 ...

  10. 遍历Map

    Map map = new HashMap(); map.put("1", "value1"); map.put("2", "va ...