* .xib,*。m和* .h文件如何相关?

时间:2010-03-12 20:52:36

标签: iphone cocoa-touch xcode

nib文件在代码中的位置/位置与* .m和* .h文件有关?

具体来说,我在谈论你何时创建一个新的Objective-C类,而不是使用initWithNibName方法。

定义此关系的位置显然由Interface Builder中的“文件所有者”关系使用。我想它是某个地方的* .plist文件。

3 个答案:

答案 0 :(得分:5)

NIB文件描述类实例。

使用Interface Builder将组件拖放到NIB中时,实际上是创建实例。

如果您拖放UIViewController,并且如果您在OWN类中使用.m和.h定义了UIViewController的子类,您将能够对界面构建器说:“使用我的自定义UIViewController的子类,用于此对象实例“。

这是在界面构建器中使用Tools / Identity Inspector实现的,然后是Class identity:在这个地方,您可以放置​​自己的类,间接引用您自己的.h和.m

答案 1 :(得分:3)

NIB文件描述接口。它们是从XIB文件生成的。 XIB文件是文本(确切地说是XML),NIB是二进制文件。您通常在Interface Builder中编辑XIB文件,并在构建项目时将它们编译为NIB。

.h文件包含类接口。 Interface Builder使用它们来编译应用程序中的Objective C类列表,并生成它们提供的出口和操作列表。设计XIB时,通常会将一个ViewController类作为文件所有者提供。 Interface Builder将扫描.h文件并从中生成出口/操作列表。

.m文件包含代码。 Interface Builder不直接使用它们。但是它们可以并且经常包含加载这些NIB文件的代码。当然,它们包含动作处理程序代码。

答案 2 :(得分:0)

虽然问题被标记为已回答,但我并没有真正看到要求的答案......

通常,代码本身在创建视图控制器时指定关系,如下所示:

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyView" bundle:nil];

告诉系统创建视图控制器实例,并查找“MyView.xib”以加载并连接到MyViewController - MyViewController也将被设置为XIB中文件的所有者。

现在另一种关联视图控制器和xib的方法是,在某些情况下,您实际上是在xib中创建视图控制器实例。标签栏控制器是一个很好的示例,您可以在其中指定要创建的视图控制器实例的选项卡,以及它将使用的标识名称。

请注意,这意味着如果您希望同一个控制器使用不同类型的屏幕,则可以使用多个xib文件来使用单个视图控制器。你不会经常这样做,但它可以很强大,如果使用得当(如果你试图使一个视图控制器执行太多的事情,它也可能是一团糟)。