从视图控制器到导航控制器的显示(例如推送)有效吗?!为什么?

时间:2015-07-25 08:50:27

标签: ios swift segue

所以我是IOS编程新手,我使用的是Swift语言。 做了几个初学者的应用程序。我在确定显示(例如推送)和已弃用的推送段之间的差异时遇到了一些麻烦。

我想要做的是从 ViewController A (嵌入导航控制器B )显示/推送到导航控制器C (包含 View Controller D )。

因为当我禁用“使用大小类”时,推送 segue不起作用并将报告错误“推送到导航控制器不是支持“。这个错误很有意义,因为你只能推送普通的视图控制器。

但是当我启用“使用大小类”(将Viewcontroller变为方形而不是矩形)时,我能够显示(例如推送)导航控制器,这真的让我很困惑。

那么显示(例如推送)与不推荐的推送之间的主要区别是什么?至于我的知识,没有重大的功能差异,但事实似乎证明我错了,让我感到困惑..

1 个答案:

答案 0 :(得分:3)

<强>更新

我重新创建了你观察到的行为。 显示(例如推送) segue确实可以从嵌入在navigationController中的一个viewController到嵌入在不同navigationController中的第二个viewController。

请注意,当推送发生时,第二个viewController以正常推送方式滑入,并出现一个后退按钮,将您带回第一个viewController。这告诉您第二个viewController实际上被推送到第一个navigationController的堆栈上。因此,它不是向您提供错误消息,而是忽略您的第二个navigationController。

使用navigationController时,只有第一个viewController嵌入在navigationController中。您不必在navigationController中嵌入后续的viewControllers,因为当您从navigationController堆栈中的先前viewController连接推送 segue时,故事板会识别出这个新的viewController由navigationController控制,它将在顶部添加navigationBar。

原始答案:

显示(例如推送) segue是自适应搜索。它根据情况选择正确的segue类型。

  • 如果您的源viewController嵌入在导航控制器中,则执行推送
  • 如果您的源viewController位于没有NavigationController的SplitViewController中,它会执行替换
  • 在所有其他情况下,它会执行模态 segue。

所以,它的工作原理是因为它实际上是在你的情况下做一个模态 segue,如果你没有使用大小类,它就有效。您会注意到,呈现的viewController实际上从底部滑入,这是模态 segue的标志。

您可以在此处找到相关信息: Backward Compatibility of Active Segues

相关问题