通过instantiateViewControllerWithIdentifier将代码与Storyboard中的视图控制器相结合

时间:2013-03-05 15:58:04

标签: objective-c xcode storyboard viewcontroller

我正在学习Objective-C,并遇到了一些对我没有意义的事情。

当我们在Storyboard中绘制视图控制器(VC)时,您可以通过在Storyboard ID中输入一个字符串来通过代码调用此VC(单击故事板中的VC,在Utilities侧栏中,Identity Inspector选项卡,Identity部分)使用instantiateViewControllerWithIdentifier方法。

在我的示例中,我在Storyboard中绘制了一个独立的UIViewController,并将Storyboard ID设置为“orderList”。在代码中,我可以通过此代码 Code1

调用此视图
UIViewController *ordersVC = [self.storyboard instantiateViewControllerWithIdentifier:@"orderList"];

如果我创建一个名为“SCVCOrders”的UIViewController的子类,并在其中插入一些修改它的外观的代码 - 比如设置标题或更改背景颜色,我认为我可以使用此代码 Code2 将绘制的VC与SCVCOrders中的代码结合起来:

SCVCOrders *ordersVC = [self.storyboard instantiateViewControllerWithIdentifier:@"orderList"];

但它并没有将它们结合起来。它仅使用故事板中绘制的内容。接下来,在Storyboard中,我将绘制的VC类设置为SCVCOrders。现在 Code2 为我提供了组合外观,但 Code1 也是如此。我的结论是,Storyboard优先于实例化代码。 Xcode并不关心我对视图进行编码的类,它只是看看Storyboard。这是对的吗?

我想有能力将我的代码分层放在Storyboard中绘制的内容上。使用我的例子,我想把我绘制的VC作为泛型类。并使用 Code2 将代码放在绘制的VC之上。或者我们还能如何实现这样的目标呢?

1 个答案:

答案 0 :(得分:2)

instantiateViewControllerWithIdentifier将返回故事板中存储的任何类。将此方法返回的类存储在具有不同类类型的指针中不会更改它实际上是什么类型的对象。

也就是说,如果你有一条鱼并称它为老虎,它并没有改变它真的是一条鱼的事实。