【问题标题】:Storyboard reference in Xcode, where should we use it?Xcode 中的 Storyboard 参考,我们应该在哪里使用它?
【发布时间】:2015-08-26 15:19:07
【问题描述】:

Xcode7 beta 中有一个名为Storyboard Reference 的新控件。下面是它的图片。

它的描述为

为外部故事板中的视图控制器提供占位符。连接到此占位符的 Segue 将在运行时实例化引用的视图控制器。

所以问题是

  1. 我们应该在哪些情况下使用它?
  2. 这是否用于通过 segue 连接两个故事板的视图控制器?
  3. 此方法是否用于以编程方式替换另一个故事板的 VC?
  4. 它可以在较旧的 iOS 版本(iOS 9 之前)上运行吗?

【问题讨论】:

  • 情况是否已为您解决,还是需要更多解释? :) @YogeshSuthar
  • @nburk 是的,我发现了如何使用它。我也将其发布为答案。 :)

标签: ios xcode xcode7


【解决方案1】:

更新(2016 年 1 月 6 日):我只想快速提一下,使用 Storyboard 引用非常非常简单,并且将帮助您在更多方面使用 Storyboard清洁和可维护的方式。 一个很好的用例是例如带有多个标签的UITabBarController。只需为每个选项卡创建一个 Storyboard,并在您的 Main.Storyboard 链接中使用 Storyboard 引用指向这些单独的 Storyboard。 用法非常简单:创建 Storyboard 引用后,您只需为其提供文件名 您要链接到的单个 Storyboard 并在该单个 Storyboard 中设置 初始视图控制器。而已! :)

下面是我对@YogeshSuthar 的问题给出的原始答案。

  1. 这可用于您在应用程序中使用多个故事板的情况。到目前为止,您必须以编程方式从其他情节提要中实例化视图控制器,现在您似乎可以使用此引用并在情节提要中创建转场,就像使用来自同一情节提要的视图控制器一样

  2. 是的,您将当前情节提要中的一个视图控制器与不同情节提要中的另一个视图控制器连接起来,您可以在这两者之间创建一个转场

  3. 是的,这可用于替换以前用于以编程方式从其他情节提要中实例化视图控制器的代码

  4. [UPDATE thx to @AlexBasson] Storyboard 引用可以部署到 iOS 8、OS X 10.10 和 watchOS 1。

【讨论】:

  • 替换意味着我们不必编写代码来从不同的故事板打开 VC。好吧,您的答案令人满意,但我仍在等待更详细的答案。 +1
  • 根据 Xcode 7 Beta 4 发行说明,“Storyboard references 可以部署到 iOS 8、OS X 10.10 和 watchOS 1。” (adcdownload.apple.com/Developer_Tools/Xcode_7_beta_4/…)
  • 感谢您的提示,我更新了答案! @AlexBasson
  • 值得注意的是,iOS8 Storyboard Reference 不能是关系segue,即从标签栏到视图控制器
  • 如何使用 unwind segue?
【解决方案2】:

故事板参考的使用

其他答案对我的问题是正确的。

我想发布Storyboard Reference 的用法,该Storyboard Reference 用于通过segue 从另一个故事板打开视图控制器,而无需编写任何代码。 :)

步骤

  1. 首先创建 1 个新的故事板,将其命名为您想要的任何名称(我将其命名为 NewStoryboard)。
  2. 将您的视图控制器(或任何视图控制器)放在NewStoryboard。
  3. 给它一个Storyboard ID(我已经给了newVC)。

  1. 切换回主情节提要。
  2. 在此情节提要中拖放Storyboard Reference 控件。
  3. 选择Storyboard Reference控件并选择Attributes Inspector。
  4. 选择您的新故事板NewStoryboard。
  5. 提供参考 ID 为 newVC(您在 NewStoryboard 故事板中使用)。
  6. 通过来自 ViewController 的 segue 连接这个 Storyboard Reference。现在它将通过 segue 打开这个 VC 而无需编写代码。 :)

【讨论】:

  • 你像托尼·斯塔克一样拯救了我的世界。正是 Xcode 10 的步骤。
【解决方案3】:
  1. 它可以在较旧的 iOS 版本(iOS 9 之前)上运行吗?

看起来可能不是:/

Storyboard 引用要求应用至少面向 iOS 9.0、OS X 10.11,或用于 watchOS 的 WatchKit 2.0。

来源:watchOS Developer Library: Adding a Reference to Another Storyboard

【讨论】:

【解决方案4】:
  1. 它可以在较旧的 iOS 版本(iOS 9 之前)上运行吗?

这是一种解决方法(已通过 Xcode 8 和 iOS 8.2 验证):

  1. 在选项卡的视图控制器中,添加一个容器视图,其框架 占据整个视图(如有必要,添加约束以执行此操作)。
  2. 删除自动添加的嵌入式视图控制器 容器视图。
  3. 创建情节提要参考并将嵌入转场从容器视图拖动到此参考。
  4. 如果您还没有,请创建 Storyboard 并将 Storyboard 引用分配给它。
  5. 在新的 Storyboard 中,您可以通过选择第一个 View Controller 并在 Attributes Inspector 中的 Simulated Metrics -> Bottom Bar 下选择要显示的 Tab Bar(例如半透明)来模拟选项卡栏的外观。

【讨论】:

  • 这对于大多数用途来说都很好,但我发现的一个缺点是似乎无法从嵌入式 Storyboard 中隐藏标签栏。
  • @yesthisisjoe 通过覆盖 - (void)didMoveToParentViewController:(UIViewController *)parent 获取包含容器视图的视图控制器的引用,然后通过 parent.tabBarController.tabBar.hidden = YES; 隐藏它,参见 stackoverflow.com/a/21282880/790198
  • 确实如此。我想我的问题是标签栏在没有任何动画的情况下隐藏,而不是像在启用 hidesBottomBarWhenPushed 的情况下推送状态栏那样移出屏幕。
  • 如何通过storyboard引用传递数据?
【解决方案5】:

刚刚在带有 iOS 8 的 Xcode 7 中测试了故事板参考,但它失败了。

Illegal Configuration: Storyboard References cannot be the destinations of 
relationship segues prior to iOS 9.0

【讨论】:

  • Xcode 7.0 的更改日志中特别提到了这一点。向后兼容的关系序列(即与 iOS 8 兼容)不能是关系序列(即标签栏控制器中的视图控制器)。正常的转场(显示/呈现转场等)在 iOS 8 上的故事板参考中按预期工作。
  • 这个功能完全没用,所有来自 UITabBarController 的 segues 都是关系
  • 确实,这没什么用。我认为编译器可以很容易地为此注入代码以在 iOS8 上运行。
  • @CristiBăluță 一种解决方法是在通用视图控制器中使用容器视图(嵌入 segue)包装目标。有关更多信息,请参阅我的答案。
  • 我想没有人再支持 ios7 所以应该不是问题,但我相信没有人应该使用这个功能,也不应该使用这个功能。谁知道他们将来会得到什么绝妙的想法……我相信线框图是当今的发展方向,您将来也不会因它们而失败。
【解决方案6】:

在Xcode Releases 的最后一个iOS 开发人员库 文档中也添加了此注释(当前版本:Xcode 7.2.1):

Storyboard References 现在可以部署到 iOS 8、OS X 10.10 和 watchOS 1.

这意味着好消息,但请记住:

故事板引用不能是关系的目的地 iOS 9.0 之前的版本

因此,如果您知道这两个要点,那么您就可以开始了:)

【讨论】:

  • 是的,我们也可以部署到 iOS8。 :)
【解决方案7】:

当我们有一个包含太多屏幕和模块的大型应用程序时, 按模块将故事板分成多个故事板是一个很好的选择 和方便的选择。使用多个故事板时,如果需要 连接不同故事板的viewControllers之间的segue,你可以 使用此控件。如果您使用此控件,则无需编写instantiateViewController 和pushViewController 等代码。您只需连接segue,执行segue,如果需要,您可以使用prepareForSegue。

让我们讨论您的所有问题:

  1. 我们应该在哪些情况下使用它? - 我想你已经找到了 你上面的答案。

  2. 这是否用于通过 segue 连接两个故事板的视图控制器? - 是

  3. 这个方法是不是用来替换另一个storyboard的VC 以编程方式? - 使用它时与编码无关 控制

  4. 它可以在较旧的 iOS 版本(iOS 9 之前)上运行吗? - 它可能有效,我 没试过

【讨论】:

  • 不错。但是,正如最新消息“Storyboard references 可以部署到 iOS 8、OS X 10.10 和 watchOS 1”。它说它可以部署。但是,我们可以在 iOS 8 目标下编译它吗?
  • 是的,您可以为 iOS8 目标编译它。我做到了,我正在使用 xCode7.1
  • @AkshitZaveri :请注意,Storyboard References 不能是 iOS 9.0 之前的关系序列的目的地。所有其他 segues 都适用于 iOS 8。
  • 你不会实例化 vc 并推送它,但你会做一些更复杂的事情,实现令人困惑的 prepareForSegue。
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多