将视图控制器从一个故事板移动或复制到另一个故事板

我有几个 UIViewControllers在一个故事板。 现在我想移动一些 UIViewControllers到另一个故事板。这可能吗?

53932 次浏览

我觉得有可能..。

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];


UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];


[self.navigationController pushViewController:theTabBar animated:YES];

是的,有可能。

  1. 选择要复制的控制器
  2. Command + C
  3. 打开第二个故事板文件
  4. Command + V

注意: “ IBOutlet 在复制后保持不变(在 Xcode 6.3.2上验证)。”

复制是可能的,但是您必须在一个项目中同时打开两个故事板,然后复制并粘贴。

复制粘贴(Command + C,Command + V)可以正常工作,但是要记住解决出口连接,因为 Xcode 似乎保留了原始连接: 关闭/重新打开项目,删除错误并重新建立缺失的连接。

接口元素可以通过 abc0在 Xib 和 Storyboard 文件之间移动。

我一开始不喜欢这样。我试图从一个专用的 Xib 复制一个 UICollectionViewCell 到我们的主故事板。单元格不会复制到故事板中。

解决方案是在故事板中选择特定的父元素。UICollectionViewCell 可以粘贴为故事板中 UICollectionView 的子元素,但是无法粘贴其他元素。

如果在粘贴特定项目时遇到困难,请务必在尝试粘贴之前再次检查是否选择了 有效的父元素

复制/粘贴是可能的,但是只有当使用 Xcode 的助理编辑器并排打开两个情节串联板时才能正常工作。

如果使用剪切 n 粘贴失败,有一个解决方案。如果粘贴的文件中现在有 ViewController,则粘贴将失败。这使得选择用于粘贴的故事板变得不可能。XCode 将拒绝粘贴。因此,您需要首先从库中将一个空的视图控制器拖到故事板中。然后在故事板中选择这个 viewController,然后粘贴就可以工作了。粘贴完成后,您可以删除虚拟 viewController。你不会再需要它了。

在 Xcode 8中,如果特别希望将视图控制器移动到另一个情节串连板,只需选择要通过 Cmd + 单击视图控制器移动的视图控制器。保持它们被选中,转到编辑器选项卡并选择重构到故事板。它会询问新的故事板文件的名称,然后按下 Enter 键。

一个新的情节串连图板文件将被创建,其中包含您选择的视图控制器。在 Main.Storyboard 中,您将看到一个 Storyboard Reference 对象取代了视图控制器,这是您对刚刚创建的新的 Storyboard 的引用。

我也遇到过类似的情况,在我的主故事板中有太多的场景需要重构。 我一开始的想法是标记几个,然后像许多人建议的那样复制粘贴。然而,我关心的是与视图控制器代码的故事板连接的任何解析。 经过多次搜索,我发现自从 iOS9以来,有一个新特性可用于“重构到 Storuboard”。您可以在源故事板中标记几个场景,并且可以从编辑器菜单中选择该选项。然后所有选中的场景都从旧的故事板中提取出来,创建一个新的故事板以及与旧的/主的故事板的链接。 有用的指南包括: Https://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references——cms-24226 Https://www.raywenderlich.com/115697/ios-9-storyboards-tutorial-whats-new-in-storyboards

我希望这个新的官方故事板重构功能能够为这类问题提供更好的解决方案。

遇到了类似的情况,我需要与2个 StoryBoard 控制器共享一个 ViewController 类。

显然,解决办法很简单:

  1. 在故事板和代码之间分割屏幕
  2. 从 Storyboard 中选择缺少与类的连接的控件
  3. 在“连接检查器”中,单击并拖动引用 Outlets 中的圆圈,使其指向类控制器中的代码
  4. XCode 将自动突出显示即将为其创建连接的@IBOutlet
  5. 一旦您释放鼠标,就会在 IB 上的控件和 Class 中创建一个连接

希望这一点足够清楚和有帮助