如何将UINavigationController弹出到调用者

时间:2011-08-19 12:51:30

标签: iphone objective-c

我有一个不在导航堆栈上的UIViewController。它初始化另一个位于堆栈顶部的UIViewController。新的根控制器会在堆栈上推送更多控制器,依此类推。

现在,我需要将所有控制器弹回到启动该过程的控制器。但是,popToRootViewControllerAnimated不起作用。

即:A - >; B - > C - > D其中B,C和D在导航堆栈上,我需要从D回到控制器A.怎么做?

-(void) loadScreenWithNavigation:(UIViewController *)controller
{    
    _navController = [[UINavigationController alloc] initWithRootViewController:(_loadedController = controller)];
    _navController.navigationBar.barStyle = UIBarStyleBlack;
    _navController.navigationBar.translucent = NO;

    [self.view addSubview:[_navController view]];
    [self.view bringSubviewToFront:[_navController view]];
}

这就是我在“home”控制器中启动导航堆栈的方式。我需要回到家庭控制器。

3 个答案:

答案 0 :(得分:5)

使用标准UINavigationController的方法:

[self.navigationController popToRootViewControllerAnimated:YES];

然后,您可以removeFromSuperview自定义初始化视图。

答案 1 :(得分:1)

我想你想删除这个[_navController视图]吧? 你可以做如下:

 if([_navController.view superview])
        [_navController.view removeFromSuperview];

修改

以简化的方式,任何UIViewController都会以它出现的相同方式消失。如果添加了任何视图

1。)addSubView方法:

  

[self.view addSubView:myView];

将被

删除
  

[myView removeFromSuperView];

2。)将其堆叠到navigationController

  

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

此视图将以堆栈形式弹出

  

[self.navigationController popViewControllerAnimated:YES];

3。)呈现模态视图

  

[self presentModalViewController:objctOfYourViewController animated:NO];

将作为

删除
  

[self dismissModalViewControllerAnimated:YES];

现在,就像你添加你的观点一样,你应该删除它们。

答案 2 :(得分:1)

在AppDelegate中,

UINavigationController *navController;

在AppDelegate.m文件中,

self.navController=[[UINavigationController alloc] initWithRootViewController:yourViewController];

[self.window addSubview:self.navController.view];

将yourViewcontrollerA推送到viewcontrollerB时,

[self.navigationController viewcontrollerB animated:YES];

相同的viewControllerB到C和C到D ..

现在,如果你想回到D,那么,

[self.navigationController popToRootViewControllerAnimated:YES];