当我链接IBoutlets / IBActions时,IB在幕后做了什么?

时间:2011-03-16 16:15:51

标签: iphone xcode ios interface-builder

我是mac dev,xcode和IB等的新手。我了解如何构建简单的应用程序和基本拖动&掉进IB,但我不知道IB在做什么以及在哪里做对象。

第二个问题是如何在不使用IB的情况下编写MVC?

2 个答案:

答案 0 :(得分:2)

当您使用IBOutletIBAction连接IB中的两个对象时,它会在XIB中创建一些特殊标记(即XML)。

当bundle(更新:抱歉,它不是一个包,但UINib)读取NIB(编译为XIB)时,它会查找它们所引用的标记和对象。之后:

  • 对于网点,它使用KVC(键值编码)来设置接收对象的相应属性。

  • 对于在控制对象上调用addTarget:action:forControlEvents:的操作。

您可以通过在代码中创建和设置对象来构建任何复杂的iPhone应用程序,但在大多数情况下,这并不明智。

进一步阅读 - Resource Programming Guide

答案 1 :(得分:0)

据我所知,来自IB的XIB文件是某种存档,您的对象及其属性存储在其中。发送-initWithNibName时,对象将被取消归档。所以基本上,你可以 - 如果你知道如何 - 创建自己的XIB文件,它们应该工作。请注意,在未指定XIB文件的情况下加载UIViewController,将加载与您的类同名的XIB文件。请参阅Wikipedia article

关于第二个问题:您可以通过编程方式创建使用IB添加的任何对象。通常,这些是使用UIView初始化的initWithFrame:子类。然后设置所需的属性。最后,使用addSubview将它们添加到您的视图中。 IBActions基本上是Target/Action Pairs。如果您例如添加UIBarButtonItem,则使用initWithBarButtonSystemItem:target:action:。设置操作等同于在IB中设置IBAction连接。

您应该能够以编程方式创建任何您想要的用户界面,但与使用IB时相比,这通常需要做很多工作。