首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >popToViewController,然后是pushViewController

popToViewController,然后是pushViewController
EN

Stack Overflow用户
提问于 2011-11-19 00:13:26
回答 3查看 1.6K关注 0票数 3

在我的rootViewController之后,有一个工作流程是这样的

代码语言:javascript
复制
viewController1 -> push viewController2 -> push viewController3 -> ***** viewController2

我想要popToViewController3。但是,我需要首先转到viewController1,因为viewController1基本上决定了推送哪个viewController2实例。所以我

代码语言:javascript
复制
// pseudo code
[popToViewController:vc1 animated:NO];
[self.navigationController pushViewController2 animated:YES];

我基本上是在推送之前弹出,这样我就不会得到vc2,vc3,vc2,vc3,vc2等等。但是在这样做的时候,因为它是推送最后一个viewController的动画,所以它给用户的印象是一个新的viewController被推送到堆栈上,而不是弹出到以前的viewController。有没有办法绕过这个问题?如果我动画的流行,而不是最后一次推动,我没有得到正确的viewController,我想要在顶部的外观。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-19 00:29:31

您可以检索(viewControllers)、修改和“重新安装”(setViewControllers)由导航控制器管理的视图控制器列表,并且“重新安装”(理论上)可以是动画。(然而,我在实践中遇到了一些动画问题,尽管我不记得细节了。)

票数 0
EN

Stack Overflow用户

发布于 2011-11-19 00:28:49

你能使用像这样的东西吗

代码语言:javascript
复制
[self.navigationController setViewControllers:[NSArray arrayWithObject:yourViewController] 
                                     animated:YES];

您可以使用堆栈上所需的视图控制器填充数组。

票数 1
EN

Stack Overflow用户

发布于 2013-01-07 20:10:08

代码语言:javascript
复制
@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;
}
@end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8185409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档