在两者之间进行选择 - Interface Builder或通过代码创建

时间:2011-06-17 12:07:36

标签: iphone xcode cocoa-touch interface-builder

当我开始使用IPhone开发时,我更喜欢使用界面构建器在我的应用程序中创建视图。随着时间的推移,我考虑了创建应用程序通过代码的选项,我觉得很舒服 现在,当我知道创建用户界面的两种方法时,我怀疑要采用哪种方式。我一直在想在哪里使用 IB 以及在哪里使用代码。如何在开始使用我的应用程序之前弄明白,我应该以哪种方式创建 UI

3 个答案:

答案 0 :(得分:10)

有许多因素会影响您的选择。它可以归结为个人品味,但使用Interface Builder有一些优势。

首先要认识到的是, UI设计本质上是一项视觉任务。 Interface Builder可以让您以比代码更快的速度创建和修改UI。而不是无休止地在代码中调整CGRect值,然后重新编译,测试和重复此过程,您可以获得有关更改的直接视觉反馈。这意味着您可以更有效地优化和优化UI,甚至可以在不花费太多时间或精力的情况下测试完全不同的布局。

另一个重要的一点是,如果您可以在Interface Builder中创建和布局控件,则意味着视图控制器中存在更少的代码。更少的代码总是一件好事(更少的错误,更容易维护,......)。

所以我相信您应该尝试尽可能多地在Interface Builder中定义布局和属性。对于喜欢“完全控制”事物的人来说,这可能很难。许多年前,可视化GUI编辑器因做错事而闻名,开发人员常常避免使用手工做任何事情。但Interface Builder非常擅长它的功能,您可以在需要时轻松地深入研究代码。

您需要动态创建多个对象(例如照片库的缩略图按钮)或者如果您有自定义布局要求,那么您将纯粹在代码中创建控件的情况。

例如,如果你有一个标签,其高度在运行时是动态的,并且你想在它下面布置一堆控件(考虑它的高度),那只能在代码中完成( UPDATE: iOS 6的自动布局现在可以做到这一点。您可以在代码中创建和布局所有,或者您仍然可以使用Interface Builder创建控件,并在XIB中为它们提供任意位置,这些位置在您在代码中进行布局时会被修改。在我的一些XIB中看到这一点并不罕见:

enter image description here

可以在IB中创建并完全布置顶部的按钮,但下面的图像视图需要在运行时计算其图像和位置。所以我们只是给他们在XIB中的任意位置。有些人可能会觉得这很难看,但它可以节省编写代码以创建图像视图和设置其属性的时间和精力。同样,更少的代码是一件好事。

其他时候您可能想要使用代码设置某些显式属性。假设您有一个需要接收触摸事件的图像视图,因为它添加了一些手势识别器。您需要将“User Interaction Enabled”属性设置为TRUE。最好在代码中执行此操作,因为需求更加明显,您可以为设置属性的原因留下适当的注释。如果你需要删除并重新创建一堆视图,那么在界面构建器中也很难“丢失”设置。

答案 1 :(得分:2)

我认为对于许多使用库存UI的应用程序,Interface Builder是一个很好的工具,可以快速完成并与底层代码链接。此外,它确实强调了视图与Controller分离的范例,因为您实际上无法将代码推送到不应该的位置。

话虽如此,我越来越少地使用它,我越了解如何快速编写接口,因为它们可能需要更灵活或需要基于其背后的模型的可变数量的UI元素。

答案 2 :(得分:1)

根据您的要求使用界面构建器。你如何管理事物取决于你。使用界面构建器创建自定义单元格更容易在稍后阶段更新,同时使用代码,如果布局更改,您必须执行大量更改。你也可以在运行实际应用程序之前可视化视图,但是在代码中你不能只需要假设。这两个东西都有它们的优点和缺点。