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

时间:2017-02-25 22:21:05

标签: ios swift swift3 uistoryboardsegue

这是我的情况:

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

基本上我想要实现的是使用导航堆栈中的Destination“替换”发件人,这样按发件人上的按钮就会移到目的地,但是按下导航栏中的“< Back”按钮发件人和目的地都将导致相同的视图控制器。

问题出在这里:我希望这两个视图控制器之间的转换是水平翻转,所以我创建了一个segue连接Sender和Destination,其类型为“Present Modally”,转换为“Flip Horizo​​ntal”,. 在发件人中,我选择“定义上下文”选项。

现在,对于连接segue:

- 当我选择“Over Current Context”进行演示时,它完全符合我的要求! ...除了动画看起来有点不稳定。基本上发送者保持平稳和静态,而目的地翻转它,而不是他们“一起”翻转。这是有道理的,因为segue正在发送 over 发件人,但这并不是我正在寻找的。

- 当我选择“当前上下文”进行演示时,动画看起来很棒! ...除非我按导航栏中的“< Back”按钮,它只会导致带有导航栏的纯黑色视图,如果我在此视图上再次按“< Back”按钮,我会得到以下内容例外:

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

任何人都知道我如何才能实现我想要做的事情?这甚至是正确的方法吗? 我已经看到一些建议尝试将视图控制器的视图翻转到新视图,而不是将整个视图控制器翻转到不同的视图控制器。但是,故事板中的一个视图控制器可以有两个“全尺寸”视图吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我确定有各种方法可行,但我首先想到的是为Sender和Destination视图创建容器视图。

所以你有......

  • 带Root View Controller的NavigationController(" RVC")
  • 容器视图控制器(" CVC")
  • Sender VC
  • 目标VC

取代" RVC"转向" Sender"你选择了CVC" ......" CVC"最初加载" Sender"进入其容器视图" ......此时,点击< Back会自然地带你回到" RVC"

点击按钮(或任何用于启动下一次转换的按钮)转到"目的地"您可以使用"将Sender替换为Destination" 在容器视图中 ...并且在那时,因为" CVC"仍然是顶级视图控制器,点击< Back将再次带你回到" RVC"

希望有道理:)

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