我可以将非xib应用转换为使用xib吗?

时间:2011-01-17 01:08:25

标签: objective-c ios interface-builder xib

我有一个带有导航控制器,两个视图控制器,两个视图,一个模型对象和没有xib文件的工作应用程序。视图以编程方式创建。现在我想使用IB和xib文件构建相同的应用程序。有没有人知道一个解释如何添加xib文件并删除它们替换的程序语句的文章?如果没有,那么讨论xib库元素和程序语句之间的等价性的东西?

为什么我要这样做?因为我试图了解xib文件的作用以及它们如何与程序语句交互,我认为这将是一个很好的学习练习。我试了一次,但无法编译。事实上,每次我使用xib文件时,除了下面的教科书示例之外,我都会陷入无法编译的代码中,如果它编译的话,它将无法编译或无法工作。所以我必须有一些基本的误解。我需要弄清楚xib文件在幕后做了什么。他们似乎可能非常强大,但如果我不明白他们在做什么,我就不会使用它们。

我在堆栈溢出的其他地方读到它们是编译视图的序列化版本(或类似的东西)。我从概念上理解这一点。我完全熟悉Python的pickle文件。但这在实践中并没有多大解释。

1 个答案:

答案 0 :(得分:1)

nib / xib包含创建和连接对象所需的信息。基本上,它包含它包含的对象的实例变量和类信息。要加载一个,请使用UINib类(Mac OS X中的NSNib)或NSBundle loadNib ...方法。 NSBundle的方法更容易使用,我建议使用它们,除非你多次加载一个笔尖。对于iOS,您通常会使用[[NSBundle mainBundle] loadNibNamed:@"NibNameWithoutExtension" owner:self options:nil];。所有者不必是self。它是IB中“文件所有者”对象表示的对象,将接收与该对象建立的任何连接。 options参数可用于获取nib中的顶级对象,但通常使用outlet。加载nib时,会对其中的对象进行分配和实例化(使用initWithCoder :),并使用setter方法创建连接,或直接设置实例变量。