gpt4 book ai didi

cocoa-touch - 不使用 transitionFromViewController 时我必须发送的 UIViewController 包含消息的正确顺序是什么?

转载 作者:行者123 更新时间:2023-12-04 03:22:43 24 4
gpt4 key购买 nike

在实现 UIViewController 包含时,在与另一个子 Controller 交换一个子 Controller 时,我必须发送的以下消息的正确顺序是什么?

如下所示,还是我的订单不正确?我错过了消息吗?

  • 将新的子 Controller 添加到当前 Controller :addChildViewController :
  • 将新子 Controller 的 subview 添加到当前 Controller 的 View :addSubview :
  • 从旧 View 到新 View 运行一些花哨的过渡。
  • 通知已添加到另一个 Controller 的新子 Controller :didMoveToParentViewController :
  • 从父 View 中删除前一个 Controller 的 View :removeFromSuperview :
  • 从其父级移除之前的子 Controller :removeFromParentViewController :

  • 编辑:
    我必须说明,上面的问题只是你没有使用 UIViewController 的转换方法,而是想要手动添加新 View 。

    最佳答案

    好的,想通了。这一切都在文档中,但我发现它隐藏得很好。我将它分为三个案例,因为我认为它可能对其他人有所帮助。为什么我让它变得如此困难而不是使用 [UIViewController transitionFromViewController:toViewController:duration:options:animations:completion] ?答案是只有在已有 View Controller 的情况下才能使用过渡方法。如果你想从“无 Controller ”转换到某个 Controller ,反之亦然,上述方法将抛出异常。

    案例一:两个 Controller 都是平等的——包括两者都是空的

  • 什么都不做,我们已经在屏幕上有了我们想要的东西。 :-)


  • 案例二:旧 Controller 为 NULL,新 Controller 不为 NULL。只需添加新的 Controller 。
  • 发送 addChildViewController到新 Controller - 这将触发隐式 willMoveToParentViewController
  • 将新 View 设为您想要的大小
  • 将子 Controller 的 View 插入此 Controller 的 View 层次结构:addSubview
  • 通过发送通知子 Controller 它被添加为子 Controller :didMoveToParentViewController


  • 案例3:旧 Controller 不为 NULL,新 Controller 不为 NULL。在 Controller 之间运行转换。
  • 调整新 View 的框架/边界。
  • 发送 addChildViewController到新 Controller - 这将触发隐式 willMoveToParentViewController
  • 送老 Controller willMoveToParentViewController并将其作为新父级传递 nil
  • 将新的 subview 添加到您的 View 中
  • 使用 UIView's 在新旧 View 之间运行自定义转换动画。
  • 在动画结束委托(delegate)中,发送didMoveToParentViewController到新 Controller 。
  • 从其父 View 中删除旧 Controller 的 View 。
  • 发送 removeFromParentViewController到旧 Controller - 这将触发隐式 didMoveToParentViewController
  • 关于cocoa-touch - 不使用 transitionFromViewController 时我必须发送的 UIViewController 包含消息的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926391/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com