故事板与旧的XIB方式

时间:2012-12-12 07:38:52

标签: ios storyboard xib

我是iOS新手,想知道哪个是最好的学习。我已经在这里阅读了一些答案,但有些人说使用Storyboard会让其他人先说学习XIB。学习XIB有什么好处吗? XIB是否更容易理解并有助于故事板?

2 个答案:

答案 0 :(得分:163)

学习这两种方法都有好处。

除了xib方法的历史价值,xib还提供了模块化。也许您有一个代码库或希望共享您制作的有用小部件。采用xib方法将有助于共享和重用。

xib方法还允许您在自己的代码方面具有更大的灵活性。例如,iOS 5包含UITableView和辅助功能/ VoiceOver支持的错误,这会导致-dequeueReusableCellWithIdentifier:返回nil,尽管另有说明(有关详细信息,请参阅this blog post)。从xib动态加载表视图单元提供了解决bug的能力。

虽然Storyboard中的table和tablecell支持非常棒,并且支持大多数人需要在表格中执行的操作,但有时您必须在行外部进行着色,您可能需要许多不同的单元格,并且再次动态加载xib可以是你的解决方案。

Storyboard的一大优势是能够查看整个应用程序的GUI流程。缩小,你可以看到一切互连和流动。使用xibs,虽然模块化很好,但想象一切如何连接和流动更加困难。对于您自己来说,这可能是一项非常有用的功能,或者如果您有更大的团队可以与之分享,则允许其他人了解应用的流程。

这两种方法都有价值,知道两者都很好,这样你就可以为手头的任务挑选最好的工具。

更新2014-10-06 - 自从我写完以上内容后,我参与了更多项目。一些使用xib,一些可以使用故事板。

故事板已经成熟了很多(我们现在已经在Xcode 6上了),并且很多人都非常喜欢它们。我真的很喜欢在一个在xib方法中更复杂的故事板中可以做更多的事情。几个例子:

一个是在使用UITableViewUICollectionView时,您可以直接在故事板中使用原型单元。很多简单易用的设置,大部分繁重的工作都可以在故事板中使用,代码更少。这很好。试图用xib方法做到这一点肯定是可行的,但要做到这一点还有很多工作要做。

另一个问题是你可以在UIViewController s与常规segues之间转换,然后返回unwind segues。在故事板中,只需极少的代码。它非常方便。

但是,对我来说仍然会杀死故事板的一件事就是尝试在协作环境中使用它们。它不会很好地合并。在某些方面,即使你正在一个>团队工作也不行。 1人。如果您自己利用版本控制,为您自己的个人工作流程使用良好的分支和合并模型,可能需要在某个分支中进行某些更改,而这些更改必须进入另一个分支,并且哦痛苦。对我来说,这就是杀死故事板的原因。

随着时间和工作的发展,我自己找到的是故事板非常适合原型制作。将事情快速推进的能力是故事板的巨大好处。使用它们的速度非常快。但速度是成本。在编写"真实"对于某些项目的代码,我只是坚持使用xibs,因为虽然它可能更多的工作,但它是一种更灵活的路线,在大型团队或更长时间内效果更好。

更新2015-04-07 另一个更新,因为过去几个月的项目迫使我使用故事板,这提供了更多的见解。

首先,有些事情要求采用一种方法。例如,显然在使用xib中的大小类时存在一些边缘情况错误,这些大小类在故事板中不存在同样的事情。因此,如果你受到虫子的影响,这可能会迫使你的手一个方向或另一个。另一个是要记住,故事板通常在UIViewController级别上工作,所以如果您需要执行诸如加载UIViewUICollectionViewCell之类的内容,那可能会由xib更好地服务。

其次,我不知道为什么一开始我没有想到这一点,但是 nothing 需要你为整个项目使用一个单一的故事板!我认为故事板的本质使人们能够以这种方式吸引人,但我们必须记住(我所知道的)没有任何要求。

我发现效果很好的方法是通常接近每个"查看分组"每个故事板。也就是说,通常你的ViewControllers往往是孤立的,每个故事板(或xib)最多只有1个。但是你可能会遇到两个密切相关的ViewControllers,将它们放在同一个故事板中是有意义的,特别是因为你可以很容易地将它们挂在它们之间,比如segues。

多个故事板的主要优势是什么?团队合作。这样Fred可以在他的故事板上工作,而Wilma可以在她的故事板上工作,并且没有对合并问题或工作协调的强烈担忧!使用多个故事板(通常每个故事板一个ViewController)对于在多人开发团队中使用故事板是一个巨大的帮助。

非常明显的Apple希望我们更喜欢故事板,而现在我更多地接受它们。使用多个故事板,但在需要时仍然使用xib,现在工作得相当好。

更新2015-09-21 既然Apple已经发布了 Xcode 7 ,那么就更有理由采用故事板了,因为Apple致力于克服缺点。

最重要的改进是故事板引用,它允许您在一个故事板中创建对另一个故事板的引用。它很简单,现在你可以有跨故事板(进入和退出)。我已经在新项目中使用了几次,这只是一种乐趣。

另一项改进是您可以在故事板中创建独立的UIView类。然而,在撰写本文时,我的结果却是喜忧参半。简单的案例可以解决,但有些案例更复杂"东西没有。例如,我有一个UIViewController,其中包含UITableView。因为它是一个包含5个静态单元格的简单表格,所以我只是将5 UITableViewCell实例化为故事板中ViewController的一部分。似乎工作,但在运行时,实际上没有任何东西会加载和显示;将UITableViewCell移动到xib中,一切正常。我不确定我做错了什么或者它是什么,所以YMMV。但即便如此,即使只是一些怪癖,我确定苹果会解决它们,然后另一个对故事板的障碍将会下降。我会说,如果你需要这样的支持,你应该尝试一下,看看它是如何适合你的。有很大的希望。

越来越多的故事板正在变得非常出色。

答案 1 :(得分:72)

你可以用故事板做一些你不能用笔尖做的事情。故事板允许您在视图控制器之间创建分段,并允许您就地设计表格视图单元。

你可以用笔尖做一些你无法用故事板做的事情。在nib中,您可以创建对File的Owner占位符的引用。您可以创建多个顶级视图,编辑它们,并在它们之间创建连接。 See this answer举例说明你为什么要这样做。您可以添加外部对象占位符(一种很少使用的功能)。

故事板的缺点是它们将一堆不同的,松散相关的对象收集到一个大文件中。如果您正在与一些开发人员合作开发一个项目,那么如果您使用的是故事板,那么与使用xib文件相比,您更有可能遇到合并冲突。

你肯定应该在某些时候了解笔尖。无论您是想从头开始还是从故事板开始,都可能不太重要。只需找到您喜欢的一些教程,并使用他们使用的任何类型的文件(笔尖或故事板)来完成它们。