在此之前,我想说我是Swift和IOS开发的新手。
我目前正在尝试执行从选项卡栏视图返回到根视图控制器的分割,这是一个拆分视图控制器。

从下面的图片中,我想选择'cancel‘按钮并返回到我的根视图控制器,这是一个拆分

视图控制器
下面是我设置的序列图像板片段

下面是我使用的代码。
@IBAction func cancelButton(_ sender: Any) {
performSegue(withIdentifier: "submit", sender: nil)
}当我第一次启动我的应用程序并开始使用它时。一切都正常工作。如下所示,当从左侧选择一个项目时,会在详细视图中填充正确的数据。

即使侧推菜单在第一次打开时也能正常工作,如下所示。

然而,正是当我在侧边菜单中选择“提交邮件”选项,并试图返回到带有段的根视图时,应用程序开始崩溃。
如下所示,当我带着段返回时,我已经设置了当从主视图中选择一个项目时,不再填充细节视图中的数据。

此外,侧推菜单现在在打开时是全屏的。

为什么会发生这种情况有什么原因吗?作为进一步的说明,我使用了Cocoapod的SideMenu作为侧推菜单。
谢谢!
发布于 2018-08-21 01:37:32
Segues用于将控制器推到导航层次结构上,而不是像您试图做的那样倒退。您应该将导航层次结构视为树结构,其中控制器之间很少有任何循环关系。您可以在层次结构中添加和删除控制器,以“向前”和“向后”。在您的场景中实际发生的情况是,您的根控制器的一个新实例被推送到导航堆栈上,该实例尚未使用原始根控制器具有的状态进行初始化。虽然可以使用一种特殊类型的段,称为展开segues来“倒退”,但我不建议这样做,因为它们很难连接,并且生成的代码并不明确它做了什么。
相反,您可以结合使用UIViewController.dismiss和委托模式来实现您想要的功能。
发布于 2018-08-21 01:56:56
要从tabBarController返回,我只需设置一个展开段:
在根视图控制器中声明展开(在函数中不需要代码)
@IBAction func unwindToRootViewController(_ sender: UIStoryboardSegue) {
// You can print("I returned"), just to test
}将触发返回的按钮连接到tabBarController的exit按钮,然后选择unwindToRootViewController
https://stackoverflow.com/questions/51934103
复制相似问题