macOS学习之OS X View Controllers


View Controller Life Cycle


Since view controllers are responsible for managing views, they expose methods that allow you to hook into events associated with the views. For example the point at which the views have loaded from the storyboard, or when the views are about to appear on the screen. This collection of event-based methods are known as the view controller life cycle.
The life cycle of a view controller can be divided into three major parts: its creation, its lifetime, and finally its termination. Each part has methods you can override to do additional work.

翻译:


由于视图控制器负责管理视图,所以它们会暴露允许您与视图关联的事件的方法.。例如,在这一点上视图已经从storyboard中加载,或者视图将出现在屏幕上的时候。这种基于事件的方法的集合被称为视图控制器生命周期
一个视图控制器的生命周期可以分为三个主要部分:它的创建,它的生命时间,并最终终止。每个部分都有方法可以重写做额外的工作.。

Creation

  1. viewDidLoad() is called once the view is fully loaded and can be used to do one-time initializations like the configuration of a number formatter, register for notifications, or API calls that only need to be done once.
  2. viewWillAppear() is called every time the view is about to appear on screen. In our application, it is called every time you select the Overview tab. This is a good point to update your UI or to refresh your data model.
  3. viewDidAppear() is called after the view appears on screen. Here you can start some fancy animations.

翻译:


  1. viewDidLoad() 视图被完全载入的时候只会被调用一次,并且能够被用于一次性的初始化,比如number formatter的配置,注册通知,或者API的调用这些只需做一次的操作
  2. viewWillAppear() 每次视图显示在屏幕中的时候都会被调用。在我们的应用中,当你每次选择Overview tab的时候都会调用它。这是更新UI或刷新数据的好方法。
  3. viewDidAppear() 当视图已经显示到屏幕上的时候会被调用,这里你可以开始一些花式的动画。

Lifetime

Once a view controller has been created, it then enters a period during which it it handles user interactions. It has three methods specific to this phase of its life:

翻译:


一旦创建了一个视图控制器,它就进入一个处理用户交互的周期。它有三个方法具体到这一阶段:

  1. updateViewConstraints() is called every time the layout changes, like when the window is resized.
  2. viewWillLayout() is called before the layout() method of a view controller’s view is called. For example, you can use this method to adjust constraints.
  3. viewDidLayout() is called after layout() is called.

翻译:


  1. updateViewConstraints() 每次layout改变都会调用这个方法。如窗口大小的变化。
  2. viewWillLayout() 会在前一个视图控制器视图的layout() 方法调用前调用,例如,你可以用这个方法来调整约束条件
  3. viewDidLayout()layout()调用方法之后调用。

In all three methods, you must call the super implementation at some point.

翻译:


在这三个方法中,你必须要调用他们的父类实现。

Termination

These are the counterpart methods to creation:

翻译:


这些是和创建方法相对应的方法。

  1. viewWillDisappear() is called before the view disappears. Here you can stop your fancy animations you started in viewDidAppear().
  2. viewDidDisappear() is called after the view is no longer on the screen. Here you can discard everything you no longer need. For example, you could invalidate a timer you used to update your data model on a periodic time base.

翻译:


  1. viewWillDisappear() 会在视图即将消失的时候调用。在这里你可以停止你在viewDidAppear() 中开始的动画
  2. viewDidDisappear () 当视图从屏幕上消失的时候会调用这个方法,在这里你可以丢弃你不再需要的一切。例如,你可以暂停你的定时器去更新你的数据模型。

Life cycle in practice


Now that you know the most important things about a view controller’s life cycle, it’s time for a short test!
Question: Every time OverviewController’s view appears, you want to update the UI to take into account that a user selected a product when the Details tab was selected. Which method would be a good fit?

翻译:


现在你知道了一个视图控制器生命周期中最重要的事情,现在是进行短测试的时候了!
问题:每次 OverviewController’s 的视图出现,当用户选择Details Tab的时候,你想去更新用户的UI。哪个方法是最佳的选择?

Solution Inside
There are two possible methods: viewWillAppear() and viewDidAppear(). The best solution is to use viewWillAppear() so that the user sees the updated UI at the moment the view appears. Using viewDidAppear() means that a user would see the UI appear first showing old data before updating.

翻译:


解决方案
有两种可能的方法:viewwillappear()viewdidappear()。最好的解决办法是使用 viewwillappear() 让用户看到更新的用户界是在视图将要显示的时候。使用 viewdidappear() 意味着用户将要看到第一次显示UI的时候,旧的数据将会被显示在视图上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,460评论 0 23
  • /* UIViewController is a generic controller base class th...
    DanDanC阅读 1,807评论 0 2
  • 下午约朋友去吃饭,因为时间还早,我们打算走着去,反正也不太远。 路过一个公交站,有个中年男子站在公交站背后的人行道...
    沐亦阅读 341评论 2 1
  • 说实话读《围城》是2010年的7月到现在已经6年了,再没拿起来读过。脑海中故事里的人物早已模糊,只是依稀记得一些情...
    带着面具的陌生人阅读 346评论 0 1
  • 文/逸溪 长夜未央,独自彷徨。 月色苍茫,情话寸肠。 踏歌亭上,恋人泪殇。 思念无常,竟赴凄凉。 轻步空廊,留字千...
    逸溪阅读 536评论 0 1