我使用模态转换设置故事板如下:
root - > A - > B - > C
当我从B转换到C时,我想要清除backstack,因为用户永远无法返回A,B或root。我知道删除根视图控制器是不可能的,但有一种方法可以在转换到C时从堆栈中删除A和B.
我有Android背景,在那里可以通过在开始下一个活动之前向意图添加CLEAR_TOP和NEW_TASK标志来完成。在iOS中有类似的东西吗?
我试图在从B-> C转换时调用它,但它会崩溃应用程序。
[self dismissViewControllerAnimated:NO completion:nil];
在视图上尝试了这个加载B但它不起作用。
[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
编辑:是否可以将C作为根并清除A-> B和之前的根。你会怎么做?
答案 0 :(得分:3)
您需要做的就是在C的viewDidAppear方法中将自己设置为窗口的根视图控制器。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.view.window.rootViewController = self;
}
执行此操作时,将取消分配Root,A和B.
答案 1 :(得分: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];
答案 2 :(得分:0)
您是否尝试过-removeFromSuperview
答案 3 :(得分:0)
您可以使用的一种方法是:
根 - > A - > B - > C - > (fakeRoot)=> (真正的根)
在离开root之前,您可以创建根(like this)
的快照然后,您可以使用您喜欢的模态转换过渡到“假根”,但在您想要前进的控制器类型中放置真正的根。然后删除假根以暴露真实的根。