我是 iOS 新手,想知道哪个是最好的学习方法。我已经阅读了一些答案here和SO,但有些人说使用Storyboards会其他人说先学习XIB。学习 XIB 有什么真正的好处吗?XIB 是否更容易理解并且有助于故事板?
2 回答
学习这两种方法都有好处。
除了 xib 方法的历史价值外,xib 还提供模块化。也许您有一个代码库或希望分享您制作的有用小部件。采用 xib 方法将促进共享和重用。
xib 方法还允许您在自己的代码方面具有更大的灵活性。例如,iOS 5 包含一个带有UITableView
辅助功能/VoiceOver 支持的错误,尽管另有说明,但该错误会导致-dequeueReusableCellWithIdentifier:
返回(有关详细信息,请参阅此博客文章)。从 xib 动态加载表格视图单元提供了解决该错误的能力。nil
虽然 Storyboards 中的表格和表格单元支持非常棒,并且为大多数人需要在表格中执行的操作提供了支持,但有时您必须在线条之外着色,您可能需要许多不同的单元格,并且再次,可以从 xibs 动态加载你的解决方案。
Storyboard 的一大优势是能够查看整个应用程序的 GUI 流程。缩小,你可以看到一切是如何相互联系和流动的。使用 xibs,虽然模块化很好,但很难想象一切如何连接和流动在一起。这对您自己来说可能是一个有用的功能,或者如果您有一个更大的团队要与之共享,以允许其他人查看应用程序的运行方式。
这两种方法都有其价值,了解这两种方法是很好的,这样您就可以为您手头的任务选择最好的工具。
2014-10-06 更新- 自从我写了以上内容后,我参与了更多的项目。有些带有 xib,有些可以使用情节提要。
Storyboards 已经成熟了很多(我们现在在 Xcode 6 中),并且有很多很棒的东西。我真的很喜欢在 xib 方法中更复杂的情节提要中可以完成更多工作。几个例子:
一个是在情节提要中直接使用原型单元UITableView
或UICollectionView
可以使用多少原型单元。很多漂亮和简单的设置,大部分繁重的工作都可以在故事板中,更少的代码。这很不错。尝试在 xib 方法中做到这一点当然是可行的,但要实现它还有很多工作要做。
另一个是你可以很好地在UIViewController
s 与常规 segues 之间转换,然后返回 unwind segues。就在故事板中,用最少的代码。它太方便了。
但是对我来说仍然扼杀情节提要的一件事是尝试在协作环境中使用它们。它只是不会很好地融合。在某些方面,即使您在一个超过 1 人的团队中工作,也不是这样。如果您自己利用版本控制,为您自己的个人工作流程使用良好的分支和合并模型,那么有时可能需要在某个分支中进行一些更改,然后将其引入另一个分支,并且哦,痛苦。对我来说,这就是扼杀情节提要的原因。
随着时间和工作的发展,我发现故事板非常适合原型制作。让事情快速进行的能力是故事板的巨大优势。使用它们的速度非常快。但速度是有代价的。在为某个项目编写“真实”代码时,我会坚持使用 xibs,因为虽然它可能需要更多工作,但它是一种更灵活的路线,在更大的团队中或随着时间的推移会更好地工作。
更新 2015-04-07另一个更新,因为过去几个月的项目迫使我使用故事板,这提供了更多的见解。
首先,有些事情会要求采用一种或另一种方法。例如,显然在使用 xibs 中的大小类时存在一些边缘情况错误,这些错误在故事板中不存在做同样的事情。因此,如果您受到错误的影响,那可能会以一种或另一种方式迫使您的手。另一个是要记住情节提要通常在UIViewController
关卡上工作,因此如果您需要执行诸如加载 aUIView
或 a之类UICollectionViewCell
的操作,那么 xib 可能会更好地提供服务。
其次,我不知道为什么一开始我没有想到这一点,但是没有什么需要您为整个项目使用单个故事板!我认为故事板的性质使人们能够以这种方式被吸引,但我们必须记住没有什么要求(我知道)。
我发现效果很好的是通常处理每个故事板的每个“视图分组”。也就是说,通常您的 ViewControllers 往往是孤立的,最终每个故事板(或 xib)只有 1 个。但是您可能会遇到两个密切相关的 ViewControllers 的情况,将它们放在同一个故事板中是有意义的,特别是因为这样您可以轻松地将它们连接起来,例如 segues。
多个故事板的主要优势?团队合作。这样,Fred 可以在他的 Storyboard 上工作,而 Wilma 可以在她的 Storyboard 上工作,并且不必担心合并问题或工作协调!使用多个故事板(通常每个故事板 1 个 ViewController)对于在多人开发团队中使用故事板有很大帮助。
很明显,Apple 希望我们更喜欢故事板,而这些天我更喜欢它们。使用多个故事板,但在需要时仍然使用 xib,现在工作得很好。
2015-09-21 更新现在 Apple 发布了Xcode 7,因为 Apple 正在努力克服这些缺点,所以有更多的理由采用故事板。
最重要的改进是故事板引用,它允许您在一个故事板中创建对另一个故事板的引用。制作起来非常简单,现在你可以拥有跨故事板的 segues(入口和出口)。我已经在一个新项目中使用了几次,这只是一种乐趣。
UIView
另一个改进是您可以在情节提要中创建独立的类。然而,在撰写本文时,我的结果喜忧参半。简单的案例可以解决,但一些更“复杂”的东西却不行。例如,我有一个里面UIViewController
有一个UITableView
。因为它是一个包含 5 个静态单元格的简单表格,所以我只是将 5 实例UITableViewCell
化为情节提要中 ViewController 的一部分。似乎可以工作,但是在运行时实际上什么都不会加载和显示;移动了UITableViewCell
s 成 xib,一切正常。我不确定我是否做错了什么或可能是什么,所以 YMMV。但是,即使只是有一些怪癖,我相信苹果公司会及时解决它们,然后另一个阻碍故事板的障碍将会消失。我想说,如果你需要这样的支持,你应该尝试一下,看看它对你有什么好处。有很大的希望。
故事板越来越优秀。
有些事情你可以用故事板做,而你不能用笔尖做。故事板让您可以在视图控制器之间创建转场,并让您就地设计表格视图单元格。
有些事情你可以用笔尖做而你不能用故事板做。在 nib 中,您可以创建对文件所有者占位符的引用。您可以创建多个顶级视图、编辑它们并在它们之间创建连接。 有关您为什么要这样做的示例,请参阅此答案。您可以添加外部对象占位符(很少使用的功能)。
故事板的缺点是它们将一堆不同的、松散相关的对象收集到一个大文件中。如果您正在与多个开发人员一起开发一个项目,那么如果您使用情节提要,则比使用 xib 文件更有可能遇到合并冲突。
您绝对应该在某个时候了解笔尖。无论您是想从它们开始还是从故事板开始可能都不太重要。只需找到一些您喜欢的教程,并使用他们使用的任何类型的文件(nib 或故事板)来完成它们。