故事板与代码中的做法

我在一家有几个iOS开发人员的公司工作,我们使用GIT一起工作在同一个项目中。 在开发过程中,我们从不使用Storyboard或.xib文件,因为几乎不可能正确合并它们。

随着iOS7的推出,我想到了故事板之间的根本区别,并且在不使用Interface Builder的情况下以“旧的方式”对所有UI进行编码。

这里有没有人能做到这一点? 而最重要的是,在故事板中你可以做些什么,而在XCode 5的代码中你无法做到这一点?

我将把你的问题分成两部分:NIB和故事板。

就NIB而言,源代码控制问题可能是痛苦的,但是可以pipe理的,主要是因为你通常每个视图控制器都有一个NIB文件。 你可以想象一个情况,你有两个开发人员在你的NIB供电应用程序的两个不同部分工作,没有任何合并问题。 故事板是不同的,因为你有一个单一的文件,描述你的应用程序的UI的大部分(如果不是全部)。 显然,那里的冲突问题有更大的潜力。

如果使用正确的话,NIB可以是非常有用和节省时间的。 下面是一个例子:iPad上的iPhoto App有一个非常复杂的用户界面。 这个用户界面绝大多数都是以编程方式进行布局的。 不过 ,该应用程序还使用NIB加载graphics元素,然后将其放置在代码中。 这是刷面板的工作原理 – 所有刷子都是在NIB中创build的。 这意味着苹果不必有几十个相同的图像/图像视图alloc / init代码段。 所有创作都可以在NIB中进行(这在iPhoto用户界面的WWDC 2012会议中进行了详细的讨论 – 值得追查)。

所以,NIB有时候很好,可以为你节省很多时间,而且在合并问题的时候,很多情况下可以很容易地pipe理和处理。

然后我们来看故事板。 故事板很有趣。 一方面,他们非常有帮助和有用的简单的应用程序和新平台的开发人员。 我刚刚将一个基于UINavigationController的应用程序从NIB转换到故事板,并发现一些显着的时间节省(特别是在表视图周围,因为故事板可以利用原型单元格)。

但是,如果您正在与几个开发人员一起开展大型项目,我不相信故事板是有益的。 正如你所说,与合并冲突有关的重大问题,与NIB不同,要解决它们并不容易,因为单一故事板文件控制了所有的应用程序UI。

这是我的build议(并且可以随意忽略我!) – 如果您正在开发应用程序并在代码中完全布局/ UI,则考虑NIB是否可以节省您的时间。 他们可能不会 – 他们不适合每个人 – 但是至less在考虑的时候是值得的。 您可能会惊讶于有多less大型应用程序实际使用NIB(iPhoto,正如我所提到的,还有许多由Apple提供的内置应用程序,以及大型团队提供的许多stream行的第三方应用程序)。 我可能不会考虑故事板,除非你是一个单独的开发人员在一个相当简单的导航应用程序。 这不是以任何方式下来故事板 – 我喜欢用它们 – 只是他们不适合合作。

有人发表这个评论回复你的问题 – 我想讨论它:

故事板中没有任何东西可以做,代码也无法做到。 对象,手势识别器,游戏,甚至是约束 – 都可以通过编程来实现

这在技术上是正确的,但事实上在故事板/ NIB中有些东西比代码要容易得多。 一个很好的例子是自动布局。 虽然你完全可以用代码来pipe理你的自动布局约束,但是严酷的现实是,ASCII自动布局表示比你在IB获得的可视化表示要难得多。 XCode 5 尤其如此,IB的自动布局有很大的改进(我不能详细说明,因为它仍然处于NDA之下,但是苹果公​​开地在这里公开地谈论了一些变化 )。

对我来说,故事板的唯一一个大缺点就是加载速度慢,而且在浏览故事板时通常会出现滞后现象。 我不是在谈论2-5视图控制器应用程序。 我正在谈论10个或更多…

如果我真的必须使用它们(UITableView原型单元格)或只是简单的xib,我个人的偏好是较小的故事板。

用简单的代码来做只是一个问题,你有足够的时间在你的手上吗? :)通常你不会从这样做得到很多。

你应该在你的思考中考虑这些问题:

开发时间 –

显然,从头开始创build新的应用程序时,使用xcode UIdevise器可以更快,更容易学习。 以编程的方式,你将不得不在代码中定义你想要设置的每个元素属性。 使用故事板将使开发过程更快。

代码重用 –

在使用故事板时,您必须将UI元素与控制器绑定,并在故事板文件中添加其他隐藏代码。 在控制器之间创build循环时,会添加相同的存根。 这个额外的隐藏代码将会使得在你要构build的其他应用程序中重用控制器变得更加困难。 如果您打算大量重用您的控制器代码,那么比以编程方式创buildUI元素更合适。

源代码集成 –

当几个开发人员对文件进行更改时,解决冲突是很常见的事情。 使用故事板创build和更改UI元素的附加更改被添加到故事板文件,有时会使冲突解决棘手的一种。 另一方面,当以编程方式更改UI元素时,只会将您所做的更改添加到控制器文件中。