Ios 弹出视图控制器,然后同时关闭上一个视图控制器

Ios 弹出视图控制器,然后同时关闭上一个视图控制器,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,我的主视图控制器A显示视图控制器B,然后视图控制器B将视图控制器C推到其(B)导航堆栈上。现在,从C开始,我希望能够直接转到A。如果我从C运行dismissViewController,动画不平滑,如果我将C弹出到B,然后关闭B,则有两个独立/不同的动画,我不想要 有没有一种方法可以让我直接从C转换到a,而不需要中间转换 因此,运行下面的代码(从C开始)显示了一个突然的转变 [self dismissViewControllerAnimated:YES completion:nil]; 而运行

我的主视图控制器A显示视图控制器B,然后视图控制器B将视图控制器C推到其(B)导航堆栈上。现在,从C开始,我希望能够直接转到A。如果我从C运行dismissViewController,动画不平滑,如果我将C弹出到B,然后关闭B,则有两个独立/不同的动画,我不想要

有没有一种方法可以让我直接从C转换到a,而不需要中间转换

因此,运行下面的代码(从C开始)显示了一个突然的转变

[self dismissViewControllerAnimated:YES completion:nil];
而运行下面的(从C)显示了两个独立的转换

UIViewController *previousViewController = [self.navigationController.viewControllers 
            objectAtIndex:(self.navigationController.viewControllers.count - 2)];
[self.navigationController popViewControllerAnimated:YES];
[previousViewController dismissViewControllerAnimated:YES completion:nil];

使用
popToViewController:animated:

[self.navigationController popToViewController: self.navigationController.viewControllers.firstObject animated: YES];
或者,使用
setViewControllers:animated:

NSMutableArray* viewControllers = [self.navigationController.viewControllers mutableCopy];
[viewControllers removeLastObject];
[viewControllers removeLastObject];
[self.navigationController setViewControllers: viewControllers animated: YES];

使用
popToViewController:animated:

[self.navigationController popToViewController: self.navigationController.viewControllers.firstObject animated: YES];
或者,使用
setViewControllers:animated:

NSMutableArray* viewControllers = [self.navigationController.viewControllers mutableCopy];
[viewControllers removeLastObject];
[viewControllers removeLastObject];
[self.navigationController setViewControllers: viewControllers animated: YES];

如果主控制器是根控制器,则可以使用

[self.navigationController popToRootViewControllerAnimated:YES];

如果主控制器是根控制器,则可以使用

[self.navigationController popToRootViewControllerAnimated:YES];

为此创建了一个演示,并且“如果我从C运行dismissViewController,则动画不平滑”发现动画足够平滑

视图控制器(Swift)

故事板(源代码)


为此创建了一个演示,并且“如果我从C运行dismissViewController,则动画不平滑”发现动画足够平滑

视图控制器(Swift)

故事板(源代码)



非常感谢@TomSwift。这应该是可行的,但在我的设置中还有一个问题即将出现——我实际上创建了一个新的导航堆栈(从a中显示B),因为我希望导航栏有所不同。因此,当我弹出到A时,它只是崩溃,因为A不在导航堆栈上!我需要重构很多,所以稍后可能会再次合并您的反馈。再次感谢!非常感谢@TomSwift。这应该是可行的,但在我的设置中还有一个问题即将出现——我实际上创建了一个新的导航堆栈(从a中显示B),因为我希望导航栏有所不同。因此,当我弹出到A时,它只是崩溃,因为A不在导航堆栈上!我需要重构很多,所以稍后可能会再次合并您的反馈。再次感谢!非常感谢@Flexicoder。恐怕A不是根视图控制器-事实上,根据我对Tom的评论,我从B启动了一个新的导航堆栈,弹出到根视图控制器只会将我从C带到B!再次感谢!非常感谢@Flexicoder。恐怕A不是根视图控制器