2

我正在学习 Objective-C,遇到了一些对我来说没有意义的东西。

当我们在 Storyboard 中绘制了一个视图控制器 (VC) 时,您可以通过代码调用此 VC,方法是在 Storyboard ID 中输入一个字符串(单击 Storyboard 中的 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 之上分层代码。或者我们还能如何实现这样的目标?

4

1 回答 1

2

instantiateViewControllerWithIdentifier将返回存储在情节提要中的任何类。将此方法返回的类存储在具有不同类类型的指针中不会改变它实际上是什么类型的对象。

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

于 2013-03-05T18:37:02.953 回答