如果你曾经使用InterfaceBuilder创建过一个复杂的有很多界面的应用程序,你就会明白那些Storyboards文件有多大。它会很快变得难以控制并阻碍您的进步。自从引入Storyboard之后,实际上可以将你的应用程序的不同模块切割成不同的Storyboard。在过去,这需要手动创建多个Storyboard文件并编写大量代码。为了解决这个问题,Apple在iOS9中引入了StoryboardReferences的概念。StoryboardReferences允许你从segues中引用其他Storyboard中的viewControllers。这意味着您可以将不同的功能保持模块化,同时Storyboard的尺寸变得更小且更易于管理。不仅更容易理解,而且在与团队合作时,合并(工作产品)也变得更容易。简化Storyboards为了演示StoryboardReferences是如何工作的,让我们使用一个创建的应用程序并尝试简化其结构。有问题的应用程序已上传到Github,如果你想继续查看***结果。名为OldMain.Storyboard的文件是我们的原始文件。只是在本项目中引用,我们不使用它。如果您想从头开始,请删除所有其他故事板并将OldMain.Storyboard文件更改为Main.Storyboard。下面的屏幕截图是原始Storyboard的样子。OldStoryboard如您所见,我们使用TabBarController作为初始viewController。这个TabBarController有三个navigationController,每个对应一个不同的根viewController。第一个是带有联系人列表的tableViewController,第二个也是带有收藏联系人列表的tableViewController。这两个都链接到详细信息页面viewController。第三个navigationController,包含更多信息、帐户详细信息页面、反馈页面和关于页面。虽然应用程序远非复杂,但这个Storyboard已经非常大了。我们已经看到至少10多个viewController,我们知道这很快就会变得难以管理。现在我们可以把它们拆开,那么从哪里开始呢?在这个例子中,我们有三个不同的模块。我们可以在tabBarController上清楚地识别它们。让我们从最简单的开始,在Main.storyboard的右侧,您可以看到这个为应用程序提供更多信息的viewController,它是单独的,没有链接到其他viewController。我们要做的是通过拖动(突出显示它们)来选择它们,然后单击Xcode菜单栏并选择“Editor->RefactortoStoryboard”。RefactorMenu给这个Storyboard一个名字More.storyboard然后点击Save。More.storyboard会自动添加到应用程序并打开。MoreStoryboard可以看到storyboard创建成功。此时,如果您返回Main.storyboard,您可以看到tabBarController中的其中一个viewController已更改为对故事板的引用。主要参考很棒。我们将UI的整个部分划分到另一个故事板中。不仅模块分离了,还可以在别处复用。虽然在我们的示例中不需要,但它是一个非常有用且有价值的新功能。#p#现在我们要把其他模块分开,这比上一步要复杂一点,因为实际上这两部分链接到同一个viewController。两个TableView都通过segue显示联系人详细信息页面。你选择做什么?将viewController保留在Main.storyboard中将viewController重构为它自己的故事板这两个选项都很好,我个人倾向于将它们分开。所以选择详情页viewController,点击Xcode菜单“Editor->RefactortoStoryboard”。为新故事板命名并保存。这将创建并打开一个新的故事板。它会链接到联系人页面的tableViewController和收藏的联系人页面。现在回到Main.storyboard,选择navigation和contacttableViewControllers,并创建它们作为新的故事板引用。同理,也操作了自己喜欢的viewController。下面是运行后的结果。结果我们在项目中将Main.storyboard拆分为5个故事板。Main.storyboard包含一个tabBarController和三个链接到其他故事板的控制器,链接到ContactDetails.storyboardContactDetail.storyboard一个单独的viewController,显示联系人详细信息并可以链接到联系人和最喜欢的故事板。More.storyboard包含一个viewController,它显示有关应用程序的更多信息。这种重构使我们的故事板更加模块化和组件化。可以帮助我们以后更好的开发这个应用。从StoryboardReference打开特定的viewController。到目前为止,我们只分享了如何从故事板转场创建和显示故事板引用。我们还没有展示如何在不使用重构工具的情况下手动添加故事板。假设,我们想在联系人页面的右上角添加一个“账户”按钮,点击这个按钮可以快速进入账户页面查看更多信息,而无需点击设置页面。打开Contacts.Storyboard,拖拽一个UIBarButtonItem到tableViewController的导航栏上,设置title为“Account”。然后,找到“StoryboardReference”控件并将其拖到ContactsStoryboard上。并打开属性检查器面板。为Storyboard属性选择“more”,并将ReferencedID属性设置为“accountViewController”。这允许我们引用帐户信息页面viewController而不是链接到更多故事板的初始视图控制器。AccountViewController选择“account”按钮,按住Control键和鼠标左键,并将其拖到故事板引用上,从而创建一个segue。accountSegue的最后一步是设置accountViewController的标识符。打开More.storyboard并选择accountViewController,打开身份检查器并将StoryboardID设置为“accountViewController”。这样,当你点击账户按钮时,你会进入该账户的详细页面。如您所见,添加StoryboardReference,无论是通过重构工具还是手动,都是简单、直接且有效的。他允许你创建更多组件化、可重用和模块化的应用程序。***,本指南的最终结果可以在Github上查看。如需进一步阅读以了解有关Xcode7的StoryboardReferences的更多信息,请观看WWDC2015session215.Storyboards的新增功能。前20分钟正是关于StoryboardReferences的内容。这是一个系列文章,查看更多请移至目录页
