0

我有一个使用模态转换设置的故事板,如下所示:

根 -> A -> B -> C

当我从 B 转换到 C 时,我想清除后台堆栈,因为用户将永远无法返回 A、B 或 root。我知道不可能删除根视图控制器,但是有没有办法在转换到 C 时从堆栈中删除 A 和 B。

我有 Android 背景,可以通过在开始下一个活动之前简单地将 CLEAR_TOP 和 NEW_TASK 标志添加到意图来完成。iOS中是否有类似的东西?

我试图在从 B->C 过渡时调用它,但它会使应用程序崩溃。

[self dismissViewControllerAnimated:NO completion:nil];

在视图中也尝试过 Load of B 但它不起作用。

[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];

编辑:是否可以使 C 成为根并清除 A->B 和以前的根。你会怎么做?

4

4 回答 4

3

您所要做的就是在 C 的 viewDidAppear 方法中将自己设置为窗口的根视图控制器。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.view.window.rootViewController = self;
}

执行此操作时,根、A 和 B 将被释放。

于 2013-07-29T03:57:21.523 回答
1

也许您可以使用 UINavigationController 来实现您想要的。B->C之后,清空控制器堆栈即可。您可以像这样自定义过渡样式UINavigationController

CATransition *animation = [CATransition animation];
[animation setDuration:0.3];
[animation setType: kCATransitionMoveIn];
[animation setSubtype: kCATransitionFromTop];
[animation setTimingFunction:[CAMediaTimingFunction   functionWithName:kCAMediaTimingFunctionDefault]];

[nav pushViewController:yourViewController animated:NO];

[nav.view.layer addAnimation:animation forKey:nil];
于 2013-07-28T06:51:09.303 回答
0

你有没有尝试过-removeFromSuperview

于 2013-07-28T06:50:55.167 回答
0

您可以使用的一种方法是:

root-> A -> B -> C -> (fakeRoot) => (real root)

在离开根之前,您可以创建根的快照(像这样

然后你可以使用你花哨的模态转换来转换到“假根”,但把真正的根放在它后面,在你想要前进的控制器类型中。然后只需删除假根以暴露真实根。

  • 制作一个名为“fakeRoot”的 viewController 控制器,它只是一个充满屏幕的大 imageView
  • 将 imageView 设置为您使用上面的快照创建的“root”图像。
  • 将您的模态转换到此 imageView
  • 在没有动画的情况下弹出到导航控制器的根目录(应该使根出现,但您不会注意到,因为您的模态呈现视图看起来就像它一样)
于 2013-07-28T06:52:15.423 回答