在我的rootViewController之后,有一个工作流程是这样的
viewController1 -> push viewController2 -> push viewController3 -> ***** viewController2我想要popToViewController3。但是,我需要首先转到viewController1,因为viewController1基本上决定了推送哪个viewController2实例。所以我
// pseudo code
[popToViewController:vc1 animated:NO];
[self.navigationController pushViewController2 animated:YES];我基本上是在推送之前弹出,这样我就不会得到vc2,vc3,vc2,vc3,vc2等等。但是在这样做的时候,因为它是推送最后一个viewController的动画,所以它给用户的印象是一个新的viewController被推送到堆栈上,而不是弹出到以前的viewController。有没有办法绕过这个问题?如果我动画的流行,而不是最后一次推动,我没有得到正确的viewController,我想要在顶部的外观。谢谢。
发布于 2011-11-19 00:29:31
您可以检索(viewControllers)、修改和“重新安装”(setViewControllers)由导航控制器管理的视图控制器列表,并且“重新安装”(理论上)可以是动画。(然而,我在实践中遇到了一些动画问题,尽管我不记得细节了。)
发布于 2011-11-19 00:28:49
你能使用像这样的东西吗
[self.navigationController setViewControllers:[NSArray arrayWithObject:yourViewController]
animated:YES];您可以使用堆栈上所需的视图控制器填充数组。
发布于 2013-01-07 20:10:08
@interface UINavigationController (PushThenPop)
-(void)popToViewController:(UIViewController*)rootViewController
thenPushViewController:(UIViewController*)pushViewController;
@end
@implementation UINavigationController (PushThenPop)
-(void)popToViewController:(UIViewController*)rootViewController
thenPushViewController:(UIViewController*)pushViewController
{
NSMutableArray *viewControllers = self.viewControllers.mutableCopy;
// Pop viewcontrollers until we reach the rootViewController
while(viewControllers.count >= 1) {
id last = [viewControllers lastObject];
if (last == rootViewController) break;
[viewControllers removeLastObject];
}
// Bail out the array is empty. We expect the array to contain at least 1 element, the rootViewController.
if (!viewControllers.count) {
return;
}
// Push the new view controller
[viewControllers addObject:pushViewController];
self.viewControllers = viewControllers.copy;
}
@endhttps://stackoverflow.com/questions/8185409
复制相似问题