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

时间:2012-11-16 13:12:01

标签: ios xcode uiviewcontroller storyboard

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

10 个答案:

答案 0 :(得分:133)

是的,有可能。

  1. 选择要复制的控制器
  2. 命令 + C
  3. 打开您的第二个故事板文件
  4. 命令 + V
  5. 注意:“IBOutlets在复制后保持不变(在Xcode 6.3.2上验证)。”

答案 1 :(得分:31)

可以复制,但您必须在一个项目中一次打开两个故事板,然后复制并粘贴。

答案 2 :(得分:28)

在Xcode 8中,如果您特别想要将视图控制器移动到另一个故事板,只需选择要通过Cmd移动的视图控制器+单击视图控制器。保持选中状态,转到“编辑器”选项卡,然后选择“重构到故事板”。它将询问您新故事板文件的名称,然后按Enter键。

将使用您选择的视图控制器创建一个新的故事板文件。在Main.storyboard中,您将看到一个Storyboard Reference对象代替该视图控制器,这是您对刚刚制作的新故事板的引用。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

可以复制/粘贴,但只有当你使用Xcode的助理编辑器并排打开两个故事板时它才有效。

答案 5 :(得分:0)

可以通过复制/粘贴在Xib和Storyboard文件之间移动界面元素。

这本来不适合我。我试图将UICollectionViewCell从专用Xib复制到我们的主故事板。单元格不会复制到故事板中。

解决方案是选择故事板中的特定父元素。 UICollectionViewCell可以作为故事板中UICollectionView的子级粘贴,但不能粘贴。

如果您在粘贴特定项目时遇到问题,请务必在尝试粘贴之前仔细检查您是否选择了有效的父元素

答案 6 :(得分:0)

如果使用Cut-n-Paste失败,则有一种解决方法。如果正在粘贴的文件中存在ViewController,则粘贴将失败。这使得无法选择要粘贴的故事板。 XCode将拒绝粘贴。因此,您需要先将空视图控制器拖入库中的故事板。然后在故事板中选择此viewController,然后粘贴将起作用。粘贴完成后,可以删除虚拟viewController。你不会再需要它了。

答案 7 :(得分:0)

我遇到了类似的情况,在我的主故事板中,我有太多的场景,需要重构。 我在开始时的想法是标记几个并按照许多人的建议复制粘贴。但是,我担心任何与视图控制器代码的故事板连接的解决方案。 经过多次搜索,我发现自iOS 9以来,“Refactor to Storuboard”有了一个新功能。您可以在源故事板中标记多个场景,然后可以从“编辑器”菜单中选择该选项。然后,从旧故事板中提取所有选定的场景,创建新的故事板以及旧/主故事板中的链接。 有用的totorial是: 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

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

答案 8 :(得分:0)

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

显然,解决方案很简单:

  1. 在故事板和代码之间拆分屏幕
  2. 从 Storyboard 中选择缺少与类的连接的控件
  3. 在连接检查器中,单击并拖动引用插座内的圆圈到类控制器内的代码
  4. XCode 将自动突出显示即将为其创建连接的@IBOutlet
  5. 只要您松开鼠标,就会在 IB 上的控件和类中的控件之间创建连接

希望这足够清楚并且有帮助

答案 9 :(得分:-1)

我认为有可能......

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

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

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