使用单个推送动画推送和呈现视图控制器
Push and present view controllers with a single push animation
来自我的导航控制器的根视图控制器Root
- 我想推送一个视图控制器
A
- 然后立即呈现另一个视图控制器
B
。
如何使用单个 push 动画同时执行这两项操作?
( 这背后的想法是视图控制器 A
允许编辑一些内容。如果没有创建内容,它需要首先显示视图控制器 B
允许用户输入标题然后创建内容。)
我尝试过的:
当我在视图控制器 A
的 viewDidLoad()
方法中执行以下操作时:
if content == nil {
let createContentViewController = // instantiate new view controller instance
present(createContentViewController, animated: false)
}
UIKit 也会在 animated
设置为 false 时省略 push
动画——所以我根本看不到任何动画。当 animated
设置为 true
时,我得到一个双重动画(首先按下,然后是模态)。
您在执行您描述的操作时遇到问题的原因是,在视图控制器 A 成为视图控制器层次结构的一部分之前,您无法 present
在视图控制器 A 上查看控制器 B — 并且直到您拥有推了,不是。
因此,我建议在这个故事中完全不要使用呈现的视图控制器。在我看来,您真正描述的只是一个视图控制器 A 及其主视图(视图 A),其前面有一个视图 B。这是您可以在创建 View Controller A 和推送它之间轻松准备的事情。视图 B 仍然可以包含一个关闭按钮或类似的按钮,您可以通过将其滑出屏幕来响应,从而显示视图 A。
如果出于代码组织的目的,您确实需要一个视图控制器 B,那么让视图控制器 A 成为视图控制器 B 的自定义父视图控制器。该解决方案的一个很酷的特性是整个事情都可以在使用嵌入 segue 的故事板。如果我们推送 View Controller A 而你不需要 View Controller B,你只需在推送之前隐藏 View B。
来自我的导航控制器的根视图控制器Root
- 我想推送一个视图控制器
A
- 然后立即呈现另一个视图控制器
B
。
如何使用单个 push 动画同时执行这两项操作?
( 这背后的想法是视图控制器 A
允许编辑一些内容。如果没有创建内容,它需要首先显示视图控制器 B
允许用户输入标题然后创建内容。)
我尝试过的:
当我在视图控制器 A
的 viewDidLoad()
方法中执行以下操作时:
if content == nil {
let createContentViewController = // instantiate new view controller instance
present(createContentViewController, animated: false)
}
UIKit 也会在 animated
设置为 false 时省略 push
动画——所以我根本看不到任何动画。当 animated
设置为 true
时,我得到一个双重动画(首先按下,然后是模态)。
您在执行您描述的操作时遇到问题的原因是,在视图控制器 A 成为视图控制器层次结构的一部分之前,您无法 present
在视图控制器 A 上查看控制器 B — 并且直到您拥有推了,不是。
因此,我建议在这个故事中完全不要使用呈现的视图控制器。在我看来,您真正描述的只是一个视图控制器 A 及其主视图(视图 A),其前面有一个视图 B。这是您可以在创建 View Controller A 和推送它之间轻松准备的事情。视图 B 仍然可以包含一个关闭按钮或类似的按钮,您可以通过将其滑出屏幕来响应,从而显示视图 A。
如果出于代码组织的目的,您确实需要一个视图控制器 B,那么让视图控制器 A 成为视图控制器 B 的自定义父视图控制器。该解决方案的一个很酷的特性是整个事情都可以在使用嵌入 segue 的故事板。如果我们推送 View Controller A 而你不需要 View Controller B,你只需在推送之前隐藏 View B。