繁体   English   中英

迅速,选择从标签栏控制器中拆分视图控制器

[英]Swift, segue to split View Controller from Tab Bar Controller

我想通过说我是Swift和IOS开发的新手来对此进行开头。

我目前正在尝试从选项卡栏视图返回到作为拆分视图控制器的根视图控制器执行segue。 在此处输入图片说明

从下面的图片中,我想选择“取消”按钮,并返回到我的根视图控制器(已拆分) 在此处输入图片说明 视图控制器

下面是我设置的情节提要剧集

在此处输入图片说明

下面是我正在使用的代码。

@IBAction func cancelButton(_ sender: Any) {
    performSegue(withIdentifier: "submit", sender: nil)

}

最初启动我的应用程序并开始使用它时。 一切正常。 如下所示,当从左侧选择一个项目时,正确的数据将填充在详细视图中。

在此处输入图片说明

初次打开时,即使侧面推动菜单也可以正常工作,如下所示。 在此处输入图片说明

但是,这是当我在侧面菜单中选择“提交邮件”选项并尝试返回到rootview时,该应用开始崩溃。

如下所示,当我使用segue返回时,在从主视图中选择一个项目时,不再在详细视图中填充数据。

在此处输入图片说明

此外,当打开时,侧面推送菜单现在全屏显示。

在此处输入图片说明

为什么会这样呢? 还要注意一点,我在侧面推动菜单中使用了Cocoapod SideMenu。

谢谢!

Segues用于将控制器推入导航层次结构,而不是像您尝试的那样向后退。 您应该将导航层次结构视为树形结构,其中控制器之间几乎没有任何循环关系。 您可以从层次结构中添加和删除控制器,以进行“前进”和“后退”。 在您的方案中实际发生的情况是,将根控制器的新实例推送到导航堆栈上,而该实例尚未以原始根控制器具有的状态进行初始化。 尽管可以使用一种特殊类型的segue(称为unwind segues)来“后退”,但我不建议这样做,因为它们连接起来很复杂,并且编写的代码不明确其功能。

相反,您可以将UIViewController.dismiss与委托模式结合使用以实现所需的功能。

要从tabBarController返回,我只需要设置一个展开键即可:

在根视图控制器中声明展开(在func中不需要代码)

@IBAction func unwindToRootViewController(_ sender: UIStoryboardSegue) {
    // You can print("I returned"), just to test
}

将将触发返回的按钮连接到tabBarController的退出按钮,然后选择unwindToRootViewController

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM