Xcode 9.2中无法将UIViewController从主Storyboard重构至独立Storyboard
解决Xcode 9.2中Storyboard重构后文件不显示且原ViewController未移除的问题
我之前也碰到过Xcode老版本里这个重构功能的小bug,结合你的情况,给你几个实用的解决步骤:
1. 手动将生成的Storyboard添加到项目导航栏
你提到新的Storyboard已经在Base.lproj目录下生成了,但Xcode导航栏看不到——这是因为Xcode没有自动把它添加到项目的文件引用列表里。操作方法:
- 打开Finder,找到你的项目文件夹,进入
Base.lproj文件夹,找到那个刚生成的Storyboard文件。 - 直接把它拖到Xcode左侧的项目导航栏里(比如放到Storyboards分组下),在弹出的对话框里,确保勾选你的项目target,点击"Finish"即可。
2. 手动移除Main.storyboard中的原ViewController
Xcode的重构功能在这里没完成清理工作,你需要手动删除:
- 打开
Main.storyboard,找到那个要迁移的ViewController,选中它后按Delete键删除。 - 这时候要注意原来指向这个VC的所有Segue都会失效,你需要重新配置这些Segue:
- 对于每个跳转的Segue,要么直接选择新Storyboard里的ViewController作为目标;如果是跨Storyboard跳转,更推荐用Storyboard Reference:添加一个Storyboard Reference组件,指向你新创建的Storyboard,然后把Segue连接到这个Reference上,再关联到目标ViewController。
3. 备选方案:手动完成迁移(更可靠)
如果Xcode的重构功能不靠谱,直接手动迁移反而更稳妥:
- 先新建一个空白Storyboard:
File > New > File > iOS > Storyboard,命名后保存到合适的位置(比如和Main.storyboard同目录)。 - 打开
Main.storyboard,选中目标ViewController,按Cmd+C复制,切换到新Storyboard里按Cmd+V粘贴。 - 删除
Main.storyboard里的原ViewController,然后按上面的方法重新配置所有Segue。
最后注意事项
- 做完这些操作后,建议执行
Product > Clean Build Folder(按住Option键可以看到这个选项),然后重启Xcode,避免缓存问题导致的异常。 - 检查所有Segue的identifier是否和代码里的调用一致,确保跳转逻辑正常。
内容的提问来源于stack exchange,提问作者Phani.m
相关产品推荐
相关产品推荐

