【问题标题】:Push and present view controllers with a single push animation使用单个推送动画推送和呈现视图控制器
【发布时间】:2018-11-23 15:29:44
【问题描述】:

来自我的导航控制器的根视图控制器Root

  • 我要推送一个视图控制器A
  • 然后立即呈现另一个视图控制器B

如何使用单个 push 动画同时完成这两项操作?

(????这背后的想法是视图控制器A允许编辑一些内容。如果没有创建内容,它需要首先显示视图控制器B,这允许用户输入标题,然后创建内容。)

我尝试过的:

当我在视图控制器AviewDidLoad() 方法中执行以下操作时:

if content == nil {
    let createContentViewController = // instantiate new view controller instance
    present(createContentViewController, animated: false)
}

UIKitanimated 设置为 false 时也省略了 push 动画 - 所以我根本没有动画。当animated 设置为true 时,我得到一个双重动画(先推,然后是模态)。 ????

【问题讨论】:

    标签: ios animation uinavigationcontroller pushviewcontroller presentmodalviewcontroller


    【解决方案1】:

    您在执行您所描述的操作时遇到问题的原因是,在视图控制器 A 成为视图控制器层次结构的一部分之前,您无法在视图控制器 A 上 present 视图控制器 B - 并且在您推送它之前,它不是。

    因此,我建议在这个故事中根本不要使用呈现的视图控制器。在我看来,您真正描述的只是一个视图控制器 A 及其前面的视图 B 的主视图(视图 A)。这是您可以在创建 View Controller A 和推送它之间轻松准备的东西。 View B 仍然可以包含 Dismiss 按钮或类似的按钮,您可以通过将其滑出屏幕来做出响应,从而显示 View A。

    如果您确实需要 View Controller B 来组织代码,那么让 View Controller A 成为 View Controller B 的自定义父视图控制器。该解决方案的一个很酷的功能是整个事情都可以在故事板中进行配置使用嵌入segue。如果我们推送视图控制器 A 而你不需要需要视图控制器 B,你只需在推送之前隐藏视图 B。

    【讨论】:

    • “在我说完之前不要说是!”我的第三段提出了一个更有趣的可能性。 :)
    • 第一段已经回答了我的问题,因为它指出我想要做的事情根本不可能。我对您建议的任何一个替代解决方案都不太满意,因为第一个确实弄乱了显然属于两个不同控制器的代码,而第二个我需要将容器视图放在情节提要中的其他内容之上,使得编辑变得乏味。所以建议 1 在代码中造成混乱,建议 2 在 Interface Builder 中造成混乱。而且这两种解决方案都没有免费提供内置的演示动画(用于解雇)。
    • 感谢这两个想法,但我想我需要提出第三个想法。很高兴知道我原来的方法根本无法实现!
    • 哦,至于那个,你可以和我说的相反:在代码中将 A 变成 B 的父级,在推送时,只有当 B 需要显示时。
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多