从Storyboard实例化View Controller与创建新实例

Ben*_*tin 40 objective-c uiviewcontroller ios uistoryboard

从故事板中实例化View Controller与创建它的新实例之间的功能区别是什么?例如:

#import "SomeViewController.h"

...

SomeViewController *someViewController = [SomeViewController new];
Run Code Online (Sandbox Code Playgroud)

#import "SomeViewController.h"

...

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

SomeViewController *someViewController = [storyboard instantiateViewControllerWithIdentifier:@"SomeViewController"];
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,someViewController实际上是一回事吗?

dpa*_*age 32

主要区别在于如何UIViewController实例化您的实例化的子视图.

在第二种情况下,您在故事板中创建的所有视图都将自动为您实例化,并且所有插座和操作将按照您在故事板中指定的方式进行设置.

在第一种情况下,没有一种情况发生; 你只需要获得原始对象.您需要分配和实例化所有子视图,使用约束或其他方式将它们布局,并自己连接所有插座和操作.Apple建议通过覆盖loadView方法来实现此目的UIViewController.


rob*_*off 13

在第二种情况下,视图控制器将从故事板加载其视图,您将很高兴.

在第一种情况下,它不会.除非你采取了其他步骤(比如重写loadViewviewDidLoad创建一个名为的xib SomeViewController.xib),否则你只会得到一个空的白色视图并感到难过.


Jos*_*eph 5

在 Swift 中你可以做同样的事情,

var someVC = self.storyboard?.instantiateViewControllerWithIdentifier("SomeViewController") as! SomeViewController
Run Code Online (Sandbox Code Playgroud)

您需要将Storyboard 中的标识符提供给 SomeViewController 并勾选使用 Storyboard ID 的复选标记