ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用。iOS中构建App提供了两种方式一种是ViewController管理比如NavigationController和UITabBarController,另外一种就是我们经常打交道用到的自定义ViewController或者是常用UITableViewController展示我们需要的数据。下面这种苹果官网的图片可以加强理解:

生命周期(LifeCircle)

视图的生命周期其实可以理解为Load-Present-Hidden(加载-展现-隐藏)三个阶段,如果从ViewController中方法中执行的顺序来看,顺序应该是这样的:

loadView→viewDidLoad→viewWillAppear→viewDidAppear→viewWillDisappear→viewDidDisappear→dealloc

loadView:一般情况下不用用到,除非需要重写设置View;

viewDidLoad/dealloc:视图加载完成之后的设置和视图销毁的时候调用;

viewWillAppear/viewWillDisappear:视图即将呈现和视图即将消失;

viewDidAppear/viewDidDisappear:视图展现在屏幕的时候和视图完全消失在屏幕的时候调用,默认不做任何操作;

如果看生命周期的话,网上有很张类似这样的图,具体可以参考下,来源于苹果官网:

可以重写代码看下效果:

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.NSLog(@"viewDidLoad-keso");
}
-(void)viewWillAppear:(BOOL)animated{NSLog(@"viewWillAppear-FlyElephant");
}
-(void)viewDidAppear:(BOOL)animated{NSLog(@"viewDidAppear");
}-(void)viewWillDisappear:(BOOL)animated{NSLog(@"viewWillDisappear");
}-(void)viewDidDisappear:(BOOL)animated{NSLog(@"viewDidDisappear-http://www.cnblogs.com/xiaofeixiang/");
}

  

viewWillLayoutSubviews和viewDidLayoutSubviews如果使用到自动布局,需要修改自动布局中的约束条件,那么可以在viewWillLayoutSubviews中进行操作,最近遇到一个就是text文本框中文字过多的时候文字不能不能置顶,可以在viewWillDidSubviews中操作:

- (void)viewDidLayoutSubviews {[self.myTextView setContentOffset:CGPointZero animated:NO];
}

生命周期中几个方法的调用实际中需要看自己的操作,在正确的地方做正确的事,会事半功倍的,具体需要看自己的熟悉程度~

ViewController切换

切换的目的就是想将合适的内容放到用户的手机屏幕上,呈现出不同的内容也就是我们的目标,一般情况有会有三种方式,联线(Segue),Modal(模态),Push(需要和NavigationController配合使用),自定义的Segue,正常情况下一般会涉及前两种,如果有特别的需求可以研究一下第三种自定义,Push方式之前的文中讲过,本文主要讲一下Modal代码实现的两种方式,如果是非代码凡事Control选择一下Modal即可;

presentViewController方式,最开始加载是一个xib是没有问题的,代码如下:

    MainViewController *mainController=[[MainViewController alloc]init];mainController.modalTransitionStyle=UIModalTransitionStylePartialCurl;[self presentViewController:mainController animated:YES completion:nil]; 

UIModalTransitionStyleCoverVertical-默认的,从下来,往下去;UIModalTransitionStyleCrossDissolve-渐变出现和消失;

UIModalTransitionStyleFlipHorizontal-水平翻转; UIModalTransitionStylePartialCurl-翻书效果;

FirstViewController对应的View不是xib在StoryBoard中,StoryBoard视图中调用presentViewController如果还是使用上面的初始化方式就是黑屏了,其实换成storyBoard中得instantiateViewControllerWithIdentifier即可~

    FirstViewController *firstController=[self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];[self presentViewController:firstController animated:YES completion:nil];

 很久没写文章,比较浅陋,如有不当,多多指正~

iOS开发-ViewController的生命周期和切换相关推荐

  1. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...

  2. iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

    iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问 ...

  3. iOS 应用程序的生命周期

    iOS应用程序的生命周期相比 Android 应用程序的生命周期来说,没那么简明易懂,但是也并不复杂.iOS应用程序的生命周期又根据系统是否支持多线程分为两种: 不支持多线程的iOS4之前的系统以及支 ...

  4. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

  5. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...

    iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...

  6. android生命周期_Android开发 View的生命周期结合代码详解

    咱们以TextView控件为例: /** * Created by SunshineBoy on 2020/9/23. */ public class TestTextView extends and ...

  7. 理清逻辑,确保云原生时代应用开发的全生命周期安全

    摘要:正所谓"道高一尺魔高一丈",不断的攻防对抗中,安全设计者也面临很大的挑战.华为云MVP毛哲文是一个偏向于安全防守的安全工程师,他认为,"攻防之间要做到平衡,知己知彼 ...

  8. 后端开发工程师的生命周期,生命在于学习

    后端开发工程师的生命周期 1 职业发展方向: 标准:需要不断学习.主动思考.不断锻炼.多提问 技术专家:三年.五年.八年的时间节点 2 后端学习成长路线 2.1 后端技术图谱 2.2 Go语言技术图谱 ...

  9. Servelet开发步骤和生命周期

    Servelet开发步骤和生命周期 (1)    程序员开发程序,实现servelet的init和destroy接口 .重写servlet的 doGet.doPost.doPut.doDelete四个 ...

最新文章

  1. 【2021】如何看待计算机视觉未来的走向?
  2. 公司6:JrVue重用布局
  3. 097实战 关于ETL的几种运行方式
  4. Android之Launcher分析和修改3——Launcher启动和初始化
  5. 为特使建立控制平面的指南-部署权衡
  6. C小项目 —— 学生选课系统
  7. innerHTML、innerText和outerHTML、outerText的区别
  8. Team Foundation 和 Visual SourceSafe 之间的区别
  9. 如何成为合格的数据分析师
  10. python免费课程400节-Python2 教程
  11. 11.微服务设计 --- 规模化微服务
  12. Windows手动搭建邮箱服务器教程,操作简单易上手
  13. 【实习周记】ArrayMap源码分析
  14. [matlab实践应用]matlab实现读取xls表格并三次样条插值拟合压杆稳定实验数据
  15. 代码量怎么计算_怎么样利用南方CASS三角网法和方格网法进行土方量计算
  16. c#写服务程序怎么判断文件夹内子文件夹里文件的变化
  17. foxmai邮件服务器pop,全球邮企业邮箱Foxmail POP3/IMAP协议设置方法
  18. python写自动答题脚本_编写Python脚本拉取优学院答案
  19. 新鲜出炉的 MVVM 脚手架——KtArmor-MVVM
  20. 【硬件工程师职业细分】揭秘硬件基带工程师

热门文章

  1. python读取中文txt文本-python读取中文txt文本的方法
  2. python基础教程第4版-Python基础教程(第3版) 笔记(四)
  3. opencv python全屏显示、置窗口大小和位置
  4. LeetCode H-Index II(二分法)
  5. LeetCode Max Points on a Line
  6. Java中的隐藏实现细节
  7. MS12-042 用户态调度机制特权提升漏洞
  8. NOIP2018 模拟 9.11
  9. 使用libssh2连接到远程服务器
  10. LiveBos---扩展按钮调用方法