在 Swift 中的 presentViewController 之后调用 pushViewController

Posted

技术标签:

【中文标题】在 Swift 中的 presentViewController 之后调用 pushViewController【英文标题】:Call pushViewController after presentViewController in Swift 【发布时间】:2016-10-02 19:59:22 【问题描述】:

在 Swift 中调用 presentViewController 之后,是否可以以某种方式调用 pushViewController

或者至少当新的UIViewController 从左侧出现时我需要实现相同的行为。我开发的唯一选择是用CATransition() 伪造pushViewController,但在这种情况下,新UIViewController 外观的机制与本机不同。

当您使用原生pushViewController 时,新的UIViewController 会出现在旧的UIViewController 上并淡出。 当您使用伪造的presentViewController 而新的UIViewController 出现之前,只会移出屏幕。

我也尝试使用 segue,但在这种情况下,新的 UIViewController 从底部出现。

因此,如果可能的话,我更愿意在presentViewController 之后调用pushViewController

谢谢。

【问题讨论】:

您是否尝试过使用导航控制器并在情节提要上制作 segue? @Lu_ 是的,它还从底部显示新的UIViewController,但我需要从左侧 所以如果你在情节提要中有 segue,简单的 performegue 方法应该可以完成这项工作 This 自定义过渡教程很棒,可能会帮助您。此外,您可能想更好地描述您在问题中想要实现的目标。 @Lu_ 从与presentViewController 一起显示的屏幕中继续从底部开始显示下一个屏幕,但我需要从左侧开始 【参考方案1】:

您需要使用UINavigationController 并将它的rootViewController 设置为您要呈现的UIViewController(从底部开始 - 作为modal)。

拨打presentViewControllerUINavigationController

然后您可以调用pushViewController 将UIViewControllers 推入导航堆栈,它将从侧面而不是底部滑入。

【讨论】:

这是个好主意,但我在这里看到了两件不适合我的模型的东西。首先UIModalTransitionStyleCoverVertical 只是 ios 9+,但我也需要这个解决方案来用于 IOS 8,其次在某些时候我会设置 rootViewController 回来,我会得到不需要的动画

以上是关于在 Swift 中的 presentViewController 之后调用 pushViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 关闭时不接收 dealloc 或 viewDidUnload

横向模式下的导航控制器堆栈,但总是以纵向帧大小模态呈现视图控制器视图

swift中的mutating

在 Swift 项目中使用 Objective C 类中的 Swift 类

在 Swift 项目中使用 Objective C 类中的 Swift 类

Swift新手教程系列5-函数+selector在swift中的使用方法