将视图控制器从一个情节提要移动或复制到另一个情节提要
Posted
技术标签:
【中文标题】将视图控制器从一个情节提要移动或复制到另一个情节提要【英文标题】:Move or copy view controller from one storyboard to another 【发布时间】:2012-11-05 05:20:01 【问题描述】:我在一个故事板中有几个UIViewControllers
。
现在我想将一些UIViewControllers
移动到另一个故事板。有可能吗?
【问题讨论】:
你可以通过copying and pasting the view controller either in the storyboard or the XML code来完成。 【参考方案1】:是的,这是可能的。
-
选择要复制的控制器
按 Command + C
打开您的第二个故事板文件
按 Command + V
注意:“复制后 IBOutlets 保持原样(在 Xcode 6.3.2 上验证)。”
【讨论】:
这太棒了。当我在 Finder 中手动复制我的 Storyboard,将其从 Apple 示例项目复制到我自己的项目时,我遇到了问题。当我在目标项目中创建故事板,然后复制并粘贴内容时,问题就消失了。奇怪。 这是有效的解决方案@Fady Kamal。有时它从一开始就不起作用 - 这取决于 X-Code 的重点。 好的,@Rahul,但是插座会发生什么 - 它们是否正确设置,或者我必须重新链接它们? 你也可以尝试复制。 Command + D 或 Edit-Duplicate 会变魔术! 确认仍在 Xcode 8.3.2 中工作。 IBOutlets、IBActions、故事板 ID、segues 都完美复制。不过,我没有破坏任何转场,这意味着我没有在转场结束时删除视图控制器并将其放入另一个故事板。我确实复制了 segue,但仅在我复制了原始视图控制器和目标视图控制器并将它们一起移动到新情节提要的地方【参考方案2】:可以复制,但您必须在一个项目中同时打开两个故事板,然后复制和粘贴。
【讨论】:
这实际上解决了我的问题。两个故事板都必须使用助理编辑器打开!谢谢!【参考方案3】:在 Xcode 8 中,如果您特别想将视图控制器移动到另一个故事板,只需通过 Cmd 选择要移动的视图控制器并单击视图控制器。保持选中状态,转到 Editor 选项卡并选择 Refactor to Storyboard。它会询问您新故事板文件的名称,然后按 Enter。
将创建一个新的故事板文件,其中包含您选择的视图控制器。在 Main.storyboard 中,您将看到一个 Storyboard Reference 对象代替了该视图控制器,它是您对刚刚制作的新故事板的引用。
【讨论】:
这非常有帮助。与其他方法不同,它保留了所有现有的关系和转场。 但是您不能重构为现有的故事板?【参考方案4】:复制粘贴(Command+C、Command+V)可以正常工作,但请记住解决插座连接,因为 Xcode 似乎保留了原始连接:关闭/重新打开项目,删除错误并重新建立丢失的连接。
【讨论】:
【参考方案5】:可以复制/粘贴,但只有在使用 Xcode 的助手编辑器并排打开两个 Storyboard 时才有效。
【讨论】:
【参考方案6】:如果您使用 Cut-n-Paste 失败,有一个解决方法。如果正在粘贴的文件中现在有 ViewController,则粘贴将失败。这使得无法选择故事板进行粘贴。 XCode 将拒绝粘贴。因此,您需要先将一个空视图控制器从库中拖入情节提要中。然后在情节提要中选择这个 viewController,然后粘贴就可以工作了。完成粘贴后,您可以删除虚拟视图控制器。你不会再需要它了。
【讨论】:
【参考方案7】:界面元素可以通过复制/粘贴在 Xib 和 Storyboard 文件之间移动。
这原本不适合我。我试图将 UICollectionViewCell 从专用 Xib 复制到我们的 Main Storyboard。单元格不会复制到情节提要中。
解决方案是选择情节提要中的特定父元素。 UICollectionViewCell 可以作为 UICollectionView 的子项粘贴到情节提要中,否则无法粘贴。
如果您在粘贴特定项目时遇到问题,请务必在尝试粘贴之前仔细检查您是否选择了有效的父元素。
【讨论】:
【参考方案8】:我遇到了类似的情况,在我的主情节提要中,我的场景太多,需要重构。 我一开始的想法是标记几个并按照许多人的建议进行复制粘贴。但是,我担心情节提要与视图控制器代码的连接的任何解决方案。 经过大量搜索,我发现自 ios 9 以来,有一个新功能可用于“重构为 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
我希望这个新的官方故事板重构功能可以为这类问题提供更好的解决方案。
【讨论】:
【参考方案9】:遇到类似的情况,我需要与 2 个 StoryBoard 控制器共享一个 ViewController 类。
显然,解决方案很简单:
-
在故事板和代码之间拆分屏幕
从情节提要中选择缺少与类的连接的控件
在连接检查器中,单击并拖动引用插座内的圆圈到类控制器内的代码
XCode 将自动突出显示即将为其创建连接的@IBOutlet
松开鼠标后,IB 上的控件和类中的控件之间就会立即建立连接
希望这足够清楚和有帮助
【讨论】:
【参考方案10】:我觉得有可能……
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
【讨论】:
我的意思是在 xcode 的故事板之间移动 viewcontroller 场景 问题是在 Storyboard 中移动/复制 VC。我不认为你的答案在任何地方都可以解决这个问题。以上是关于将视图控制器从一个情节提要移动或复制到另一个情节提要的主要内容,如果未能解决你的问题,请参考以下文章