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

Posted

技术标签:

【中文标题】我可以将非 xib 应用程序转换为使用 xibs 吗?【英文标题】:Can I convert a non-xib app to use xibs? 【发布时间】:2011-01-17 01:08:25 【问题描述】:

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

我为什么要这样做?因为我试图了解 xib 文件的作用以及它们如何与程序语句交互,我认为这将是一个很好的学习练习。我尝试了一下,但无法编译。事实上,每次我使用 xib 文件时,除了遵循教科书示例之外,我都会无可救药地纠结于无法编译或编译后无法工作的代码。所以我一定有一些基本的误解。我需要弄清楚 xib 文件在幕后做什么。它们看起来可能非常强大,但如果我不了解它们在做什么,我不会使用它们。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于我可以将非 xib 应用程序转换为使用 xibs 吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有工具可以自动将简单的 .xib 转换为 Objective-C 代码?

如何将 UIStoryBoard 代码转换为 xib 文件代码

如何将xib转换为storyboard? [重复]

将自动布局(约束)从 xib/storyboard 转换为代码? [关闭]

如何将 nib/xib 转换为目标 C 代码?

我有一个使用 XIB 文件的音乐播放器项目,如何将它们转换为故事板/视图控制器?