在保留Segues的同时替换Storyboard中的ViewController

时间:2017-03-19 12:00:51

标签: swift xcode uiviewcontroller storyboard segue

我有一个故事板,例如我有一个UITableViewController,带有一些传入和传出的Segues。假设我想让这个UITableViewController成为一个UIViewController。目前我将删除UITableViewController,在我的Storyboard上拖动UIViewController并重新创建所有Segues。

或者,我会使用Xcodes Storyboard重构来拆分我的故事板,这样我至少只需要重新创建所有传出的Segues。但是,在我希望我的ViewControllers位于同一个故事板中的某些情况下,这是不可能的,或者至少是不实际的,因为它们属于同一个。

如您所知,这很麻烦,我认为它很容易出错。

所以我的问题是:我可以替换故事板中的ViewController而不会丢失传入和传出的Segues吗?

2 个答案:

答案 0 :(得分:0)

据我所知,IB不可能。它只能在设置中交换控制器类名。但是UITableViewController有一些额外的设置,通过一个简单的重命名就不会消失/出现。

我的建议是创建新的视图控制器,逐个链接seques,然后删除不再链接的UITableViewController。

(这是我不再使用故事板的几个原因之一。相反,我尝试实现彼此独立的屏幕,因此我可以更轻松地更改流程和/或更换单个屏幕。)

答案 1 :(得分:0)

不幸的是Xcode没有这个,至少从9.2开始。解决方案是在编辑器中编辑故事板文件,但实际上并没有那么糟糕。

获取要替换的控制器的对象ID,以及将替换它的对象ID。它位于Identity Inspector,Document部分,标记为Object ID。

Storyboard editor, Identity Inspector, Document section

确保在Xcode之外编辑之前保存故事板。

故事板文件中的每个segues都是这样的:

<segue destination="S3O-z0-PFf" kind="showDetail" identifier="abcde2" id="x0q-y6-ZkJ"/>

destination ID替换为新视图控制器的对象ID:

<segue destination="b5A-4F-zOe" kind="showDetail" identifier="abcde2" id="x0q-y6-ZkJ"/>

保存文件,Xcode会自动重新加载。 segue将指向新控制器。