翻译苹果官网的文章一则

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

初始化 ViewController

第一次实例化的时候,通过生命周期创建或者加载对象,它不应该创建view hierarchy 或者其他跟显示画面相关的内容,它应该关注对象,关注实现生命周期中特殊行为的对象。

初始化storyboard中加载的ViewController

当我们在storyboard中创建view controller时,配置的属性都会存储到一个配置信息文档中,之后当实例化时,文档就会被加载到内存和进程中去,结果就是会有一系列的符合之前配置信息的对象会生成,配置信息文档会被view controller的initwithcode:方法加载。这之后任何实现了awakeFromNib方法的对象调用这个方法。用这个方法配置信息。

用代码初始化ViewController

如果view controller用代码创建的,那么我们重写一下init方法,当然这个方法首先要调用父类的init方法,然后再加上自己的其他客户化的内容。

通常,实例化方法里面不要写过于复杂的方法,而是应该实现简单的功能,并且提供必要的属性给view controller的委托类从而配置它的行为。

ViewController 当访问VIEW属性时会实例化它的VIEW Hierarchy。

无论何时当你的app需要访问view,而view对象不在内存中时,view controller都会加载view hierarchy

进内存,并且存储在它的view属性内,循环加载的步骤如下:

1、view controller 调用自己的loadview方法。方法默认会实现下面的某一个内容:

* 如果view controller关联了一个storyboard,那么就从storyboard中加载。

* 如果没有关联的故事模板,那么会创建一个空的UIView对象,并且赋值给view属性。

2、view controller调用viewDidLoad方法,这能够确保你的子类能够执行额外的load-time任务。

下面的图示展示了view controller是如何循环加载的,包含了一些需要调用的方法。我们的app可以覆盖loadview方法和viewDidLoad方法。举个例子,如果你的app没有用storyboard,但是你却想增加一个view,这时可以覆盖loadview方法用代码初始化view。

下面这个图的标题是:向内存中加载view

从storyboard中加载一个view

大多数的view controller 从storyboard中加载他们的view,优点就是可以用可见的方式配置布局,这很容易也很快速。

在interface builder中创建view

interface builder是xcode的一部分,他可以给我们的viewcontroller提供方便的直观的方式去配置view的相关属性。在这里可以同时操控view和controller,控件直接拽到工作空间中,设置大小,属性等,设置完毕后直接存储在storyboard文件中。

在interface builder中配置view的图形属性

为了正确的展示内容布局,interface builder提供了控件可以让你去指定是否view有导航bar、工具bar等其他的对象,这些对象都可以影响你的定制内容。如果controller连接到容器中,也可以提供精确的运行时的显示效果。

为view controller配置Action和Outlet

利用IB,可以在view和controller之间建立连接。

下面的代码显示如何声明一个MyVIewController类的controller以及它的两个custom outlet 和一个 ibaciton方法。这个声明其实是在.m文件内的category。outlets存储了一个按钮和一个textfield引用。下面的方法则监听按钮的按下动作。

@interface MyViewController()

@property (nonatomic) IBOutlet id myButton;

@property (nonatomic) IBOutlet id myTextField;

- (IBAction)myAction:(id)sender;

@end

而下面的图示则展示了上面代码部分建立的对象之间的连接

接下来介绍一下代码的方式创建视图(view)//1️⃣

如果你更喜欢用代码来创建视图,应该覆盖你的view controller 的loadview方法,你的方法实现应该遵从以下的几点:

1、创建一个根视图对象。

根视图内包含所有跟view controller有关的所有视图,通常会给根视图定义一个frame去匹配app window的size,frame应该是布满整个屏幕的。然而frame会根据你的view controller来调整它的display1️⃣。这个根视图可以是普通的UIView,也可以是自己的客户化的view,或者任何其他可以铺满屏幕的view。

2、创建子视图并且加入到根视图内

对于每个子视图都应该创建并且初始化,然后用addSubview:方法加入到父视图中去。

3、如果用了自动旋转布局模式,应该给每个视图配置足够多的位置限定条件。并且还要实现两个方法:viewWillLayoutSubviews和viewDidLayoutSubview来调整子类的frame。

4、添加根视图到view controller的property中。

下面的代码展示了如何创建视图和子视图

- (void)loadView

{

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];

UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];

contentView.backgroundColor = [UIColor blackColor];

self.view = contentView;

levelView = [[LevelView alloc] initWithFrame:applicationFrame viewController:self];

[self.view addSubview:levelView];

}

Note: When overriding the loadView method to create your views programmatically, you should not call super. Doing so initiates the default view-loading behavior and usually just wastes CPU cycles. Your own implementation of the loadView method should do all the work that is needed to create a root view and subviews for your view controller. For more information on the view loading process, see “A View Controller Instantiates Its View Hierarchy When Its View is Accessed.”

注意:用代码覆盖loadView方法去新建视图时,不可以调用super.初始化默认的view-loading行为,这通常会引起cpu的运行浪费。你自己的loadview方法的实现应该做所有需要的工作。

转载于:https://www.cnblogs.com/qiqingnan/p/3764110.html

翻译关于ViewController的一篇文章相关推荐

  1. 怎么将PDF翻译成中文?这篇文章教会你

    在日常的学习或工作中,当你在阅读一篇其他语言的PDF格式文章,突然有一段你不懂得是什么意思,这时就需要使用到翻译器.那么PDF怎么翻译呢?下面这篇文章就来告诉你吧! 方法一:借助"万能文字识 ...

  2. 迎战2022 - Python中文翻译《环球时报》整篇文章实战演示,调用有道翻译API接口进行英文转中文翻译实例训练

    Python 调用有道翻译 API 接口翻译<环球时报>整篇文章实战演示 第一章:翻译效果展示 ① 翻译文章示例一[得益于中国援助的数字电视,喀麦隆农村社区享受着非洲国家杯] ② 翻译文章 ...

  3. excel全文翻译怎么操作?这篇文章教你如何翻译excel

    我们在工作中,经常会遇到需要将excel翻译成外语或中文的时候,该怎么办呢?你是一行一行的复制去浏览器查找,然后再复制粘贴回表格吗?要是这样做的话,不仅浪费时间,效率还很低.那有没有什么方法是可以直接 ...

  4. 适用于火车头7.6的翻译插件-亲测10000篇文章稳定不报错

    因为php插件带来的效率降低问题,如无特别说明,本博客开发的火车头插件一律使用C#开发   最近经常看到有人在找翻译插件,官方的翻译插件貌似只有V9版本的,而且用于火车头7.6的翻译插件已经不能用了, ...

  5. 如何翻译整个excel?这篇文章教会你

    小伙伴们有收到过外语的excel表格吗?在跨国公司中,一份文件需要和不同的分公司对接,但各公司的职员来自不同的国家,从英国发到中国的excel文件往往是英文的,作为中国的职员,看着满是外语的文件想要阅 ...

  6. 看完这篇文章知道有什么英语录音翻译成中文的软件

    英语是我们从小到大九年义务必学的科目,但是到了上大学的时候不同专业学习大学英语的时间并不一样,可能是一学期也可能是两个学期,所以很多人都开始通过网课来学习英语或者听外国英语录音,从而帮助我们通过雅思. ...

  7. 整篇文章翻译软件提供多平台翻译api接口

    整篇文章翻译软件提供多平台翻译api接口,可以实现整篇文章翻译成中文.英文.阿拉伯语和其他多个语种,整篇文章翻译软件不仅支持整篇文章翻译,还可以保留原文格式段落,通过对存放文件夹进行监控,可以完成文件 ...

  8. Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!...

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. 想知道哪个音频翻译成文字的软件好用?这篇文章能够给你答案

    在日常办公中,我们不仅需要处理大量的工作文件,还要开大大小小的会议,有了会议就少不了会议纪要,但是笔速又跟不上领导的讲话速度,所以大部分人都会选择将会议记录全程以音频的形式录制下来,想着会议结束后再从 ...

最新文章

  1. acid php5,ACID原则
  2. React Native 环境配置
  3. java解析表字段_从SQL / HQL Java解析表和列名
  4. java 监听本地端口_Java-在本地端口上侦听RTP数据包
  5. HP DL G8系列服务器安装Server2003系统显卡驱动的问题
  6. 一道关于String的易错习题
  7. jquery控制只监听数字_如何在jQuery中监听并保持单击?
  8. 小议Python列表和元组中的元素地址连续性
  9. react-router v4 路由规则解析
  10. django、tornado、flask对比
  11. ros ubuntu 卸载_Ubuntu18.04 ROS Melodic安装与卸载
  12. 服务器操作系统使用相关要求,服务器操作系统使用相关要求
  13. wps中word转html乱码,wps转word格式乱码了怎么办
  14. openCv4Android之fitLine中各算法总结
  15. Ubuntu下安装VS Code遇到的小问题
  16. java创建tensorfly对象,Tensorflow对象检测自定义数据集
  17. 让后台Stopped的进程继续运行
  18. [免费]织梦xml地图生成插件
  19. 人脸识别实名认证在景区门禁系统中的应用
  20. 探索 | YMIR开源前发生了什么

热门文章

  1. ORA-12012: error on auto execute of job quot;ORACLE_OCM
  2. 《Java程序书面采访猿收藏》之 instanceof的作用是什么
  3. Week1 Team Homework #2 from Z.XML-Introduction of team member with photos
  4. [转载]Shark Machine Learning Library --之运行篇
  5. 来自韩国的优秀Java应用性能监控软件JENNIFER
  6. 韩国FPS新网游《火海逃生》新增内容
  7. java instanceof用法_Java基础高频面试题汇总(1.4W字详细解析)
  8. 清华大学计算机系人机交互,喻 纯 - 清华大学 - 《自然人机交互中的智能输入》(47页)-原创力文档...
  9. 普通平键的主要尺寸有_?办公桌分类及尺寸介绍
  10. echarts legend颜色_echarts数据可视化图表(二):双柱状图