iphone NavigationController明确的意见栈(iphone Navigatio

2019-09-17 20:18发布

我有一个使用导航控制器的iPhone应用程序。 在该控制器我推的一些看法。 在某些情况下,我想“清除”的意见堆栈,只留在堆栈中的导航控制器的RootViewController的推另一个的viewController我有。

能有人给我如何做到这一点的例子吗? 我不认为这会清除栈的任何方法。


答1:我曾试图把按钮动作下面的代码:

[self.navigationController popToRootViewControllerAnimated:NO]; 

 do some stuff here to prepare for the push.

[self.navigationController pushViewController:self.myOtherController animated:YES];

但只弹出到roorController。 它不推其他的viewController我想要的。

Answer 1:

下面的代码将允许用户向下钻取视图层次,并在按下按钮,弹出返回到根视图控制器和推的新视图。

DetailViewController.m〜从中视图控制器以清除导航堆栈:

- (IBAction)buttonPressed:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"popBack" object:nil]];
}

上面的代码做一个呼叫NSNotificationCenter ,张贴通知,该RootViewController的可以听见反应。 但是,第一,RootViewController的必须注册才能收到通知。

RootViewController.m

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushViews) name:@"popBack" object:nil];
    [super viewDidLoad];
}

接下来,RootViewController的必须设置引用选择-pushViews

- (void)pushViews {
     //Pop back to the root view controller
     [self.navigationController popToRootViewControllerAnimated:NO];

     //Allocate and init the new view controller to push to
     NewViewController *newVC = [[NewViewController alloc] init];

     //Push the new view controller
     [self.navigationController pushViewController:newVC animated:YES];
}

可以肯定的是,当你调用-popToRootViewControllerAnimated:你指定NO动画。 启用动画会导致在导航栏动画打嗝和迷惑系统。 上面的代码,当调用,将清除导航堆栈,只留下RootViewController的,然后加入NewViewController。

您最初的代码没有完全执行的原因是因为打完电话后-popToRootViewController:从你的DetailViewController,该RootViewController的的方法占据了主线程和DetailViewController被释放。 因此,没有进一步的代码被从该视图控制器运行。 使用上面的代码,导航堆栈弹出回到正在被加载相同的视图控制器。



Answer 2:

我认为你正在寻找-popToRootViewControllerAnimated:



Answer 3:

UIViewController* root = [self.navigationController.viewControllers objectAtIndex:0];

self.navigationController.viewControllers = [NSArray arrayWithObjects:root, cal, nil];

当“CAL”视图控制器中去。 但没有动画。



Answer 4:

除了海怪的答案,

下面添加功能的UIViewController,这你都要跳出来了。

(void)viewDidDisappear:(BOOL)animated {

    [super viewDidDisappear:YES];

    for(UIView *view in self.view.subviews)
    {
       [view removeFromSuperview];
    }
}


文章来源: iphone NavigationController clear views stack