【问题标题】:Presenting a view controller modally within a navigation stack在导航堆栈中以模态方式呈现视图控制器
【发布时间】:2017-02-25 22:21:04
【问题描述】:

这是我的情况:

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

基本上,我想要实现的是用导航堆栈中的目标“替换”发件人,以便按下发件人上的按钮转到目标,但按下导航栏中的“

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

现在,对于连接转场:

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

-当我选择“当前上下文”进行演示时,动画看起来很棒! ...除非我在导航栏中按下“

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

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

谢谢!

【问题讨论】:

    标签: ios swift swift3 uistoryboardsegue


    【解决方案1】:

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

    所以你有...

    • 带有根视图控制器(“RVC”)的导航控制器
    • 容器视图控制器(“CVC”)
    • 发件人 VC
    • 目标 VC

    而不是“RVC”转接“Sender”,而是转接“CVC”...“CVC”最初将“Sender”加载到其“容器视图”...此时,点击

    当您点击一个按钮(或用于启动下一个转换的任何按钮)转到“目的地”时,您可以在容器视图中使用带有“将发件人替换为目的地”的转换 .. . 那时,由于“CVC”仍然是栈顶视图控制器,点击

    希望这是有道理的:)

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

    【讨论】:

    • 嗯,那么替换操作将如何工作?我还会使用类似的水平翻转转场吗?如果是这样,我会不会遇到与以前相同的问题,只是在这种情况下它会出现在 CVC 而不是 Sender VC 中?
    • 如果你还在做这个,我在github.com/DonMag/ContainerViewExample提供了一个演示应用程序
    • 非常感谢!!它与我正在寻找的东西很接近,并帮助我得到了它!
    猜你喜欢
    • 2020-10-19
    • 2014-06-30
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多