在导航堆栈中以模态方式呈现视图控制器

Presenting a view controller modally within a navigation stack

这是我的情况:

我在导航控制器中嵌入了两个视图控制器。我称它们为发件人和目的地

基本上我想要实现的是 "replace" 导航堆栈中带有目的地的发件人,这样按下发件人上的按钮就会转到目的地,但按下“<返回”按钮Sender 和 Destination 的导航栏将指向相同的视图控制器。

这里的问题是:我希望这两个视图控制器之间的转换是水平翻转,所以我创建了一个连接 Sender 和 Destination 的 segue,类型 "Present Modally",转换 "Flip Horizontal", . 在发件人中,我 select "Defines Context" 选项。

现在,对于连接转场:

-当我 select "Over Current Context" 进行演示时,它完全符合我的要求! ...除了动画看起来有点不稳定。基本上 Sender 保持平坦和静止,而 Destination 在其上方翻转,而不是它们翻转 "together"。这是有道理的,因为 segue 呈现 over 发件人,但这并不是我想要的。

-当我 select "Current Context" 进行演示时,动画看起来很棒! ...除非我按下导航栏中的“<返回”按钮,它只会导致带有导航栏的纯黑色视图,如果我在此视图上再次按下“<返回”按钮,我会收到以下异常:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview'

有人知道我怎样才能实现我想要做的事情吗?这甚至是正确的方法吗? 我看到了一些尝试将视图控制器的视图翻转到新视图而不是将整个视图控制器翻转到不同的视图控制器的建议。但是故事板中的一个视图控制器可以有两个 "full-sized" 视图吗?

谢谢!

我确信有多种方法可行,但我的第一个想法是为 Sender 和 Destination 视图创建一个容器视图。

所以你有...

  • 带根视图控制器的 NavigationController ("RVC")
  • 容器视图控制器("CVC")
  • 发件人VC
  • 目的地VC

而不是 "RVC" 继续到 "Sender" 你继续到 "CVC" ... "CVC" 最初将 "Sender" 加载到它的 "container view" 中。 .. 此时,点击

当您点击一个按钮(或您用来启动下一个转换的任何东西)转到 "Destination" 时,您可以在容器视图中使用 "replace Sender with Destination" 的转换 ... 到那时,由于 "CVC" 仍然是栈顶视图控制器,点击

希望这是有道理的:)

此处提供演示示例:https://github.com/DonMag/ContainerViewExample