【问题标题】:How Remove middle UIViewController from presentation stack如何从演示堆栈中删除中间 UIViewController
【发布时间】:2015-05-21 22:31:29
【问题描述】:

我是一位经验丰富的 iOS 开发人员,但我偶然发现了一个我不完全确定如何解决的问题。

比如说我有 3 个 UIViewController,分别是 A、B 和 C。 A 是根,B 出现在 A 之上,C 出现在 B 之上。

B 和 C 使用 presentViewController:animated:completion 呈现: 所以表示堆栈看起来像这样。

[A] -> [B] -> [C]

在我的程序中,我想解雇 B 并且只解雇 B。 dismissViewControllerAnimated:completion: 表示如果我解雇 B,它会要求其 A 解雇 B,然后也会解雇 C。我不要那个。我只想解雇 B,以便 A 选择 C ​​作为它的presentedViewController,就像这样

[A] -> [C]

这可能吗?

--------注意事项-------

我意识到这似乎更适合另一种表示模式,其中 A、B、C 将是共同 parentViewController 下的兄弟姐妹。但我可能不会使用它。

presentingViewController/presentingViewController 模式就像一个双向链表。但是,由于这些属性是只读的,我无法进行任何节点操作。

【问题讨论】:

  • 似乎添加模拟演示动画的子视图将是解决方案
  • 为什么只需要解雇 B?为什么不等到需要解除 C 后再解除 B(这也会解除 C)?
  • 因为 B 将不再被使用,我不希望它留在内存中。
  • 也许你可以在没有动画的情况下关闭视图控制器 B 和 C,然后在没有动画的情况下呈现另一个 C。虽然不太正确。
  • 如果我这样做了,那么它将释放 C。迫使我将所有数据保存在某个地方。然后,如果我再次显示它,它将再次调用 viewDidLoad 并确保它填充了我之前保存的数据。不仅。 C 将闪烁片刻。

标签: ios objective-c uiviewcontroller presentviewcontroller


【解决方案1】:

您能否使用隐藏导航栏的导航控制器并推送控制器而不是呈现它们(使用模拟演示的推送和弹出动画)。 然后用setViewControllers把ABC栈换成AC栈?

【讨论】:

  • 您在帖子完成之前阅读了它。我说“并推送控制器而不是呈现它们(使用模仿演示的推送和弹出动画)”
  • 但这会导致不需要的后退按钮在呈现而不是按下时不会出现。
  • 所以即使隐藏了导航栏,后退按钮也会出现?
  • 显然不是。但是您不知道 OP 是否需要导航栏。 OP 很可能会显示一个标题和一个或两个按钮。
  • 我不知道,这就是为什么我没有做出这样的假设,我的回答以“你能不能”开头并以问号结尾。因此隐含地询问这种方法是否适合 OP 现有的要求和架构。
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多