15th,June,2016
learn from: OS X View Controllers Tutorial
Introducing View Controllers
A view controller is responsible for managing a view and its subviews.
ViewController 负责管理view和它的subviews。NSViewController,在OS X 10.10以前是不具备响应链的,也就是说,有个按钮在ViewController的view中,ViewController是无法接受到响应事件。
ViewControolers可以将Window中的内容分割到多个逻辑单位中。
ViewController能处理窗口的一些任务,比如调整窗口大小或者关闭窗口。
Window Controller or View Controller?
可以通过view controllers处理view和subviews与用户交互的所有功能。也可以通过view Controller实现相关联的window的功能,例如对root ViewController进行设置,调整大小,修改初始位置,设置标题等。
View Controllers in Action
A container view is a placeholder for another view that is not available in Interface Builder or is provided by another View Controller.
A Tab View Controller is a view controller subclass (NSTabViewController); its view contains a tab view with two or more items and a container view.
View Controller Life Cycle
view controller的生命周期主要分为三个部分: creation(创建), lifetime(运行时),termination(终止)。
Creation
- viewDidLoad() 当视图完全加载完后会之行一次初始化行为,如配置numberformatter的类型,注册通知,或者调用API(但只需调用一次).
- viewWillAppear() 当视图将要出现时被调用,在viewDidLoad调用之后被调用。是一个更新UI或者刷新data model的一个时机。
- viewDidAppear() 在视图出现在屏幕上时调用。可以做一些有趣的动画处理。
Lifetime
当view controller被创建之后,将会进入接收用户行为的一个阶段。
1. updateViewConstraints() 布局变化时被调用。如调整窗口大小等。
2. viewWillLayout() 在layout()方法之前被调用。可以做一些适应约束的操作。
3. viewDidLayout(() 在layout()方法之后被调用。
ps: 调用这些方法之前,需先调用super方法。
Termination
- viewWillDisappear() 在视图将要消失前被调用。在这里可以停止动画。
- viewDidDisappear() 视图不在屏幕时被调用。在这里可以丢弃任何不在需要用到的。比如,关闭一个不再需要用到的timer。