2011-08-19 58 views
0

我有一个不在导航栈上的UIViewController。它初始化位于堆栈顶部的另一个UIViewController。新的根控制器将更多的控制器压入堆栈等等。如何将UINavigationController弹出给调用者

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

ie: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]]; 
} 

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

+0

你可以告诉的UIViewController,这是不是在导航堆栈中,如何初始化另一个视图 - 控制??? – mayuur

+0

已更新,请看看 – SmallChess

+0

[self.navigationController popToRootViewControllerAnimated:YES]不适用于我,因为它只返回到控制器B.我需要A而不是B.我如何解决这类问题? – SmallChess

回答

5

使用标准UINavigationController的方法:

[self.navigationController popToRootViewControllerAnimated:YES]; 

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

1

我想你想删除这个[_navController视图]的权利? ,你可以做如下:

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

编辑:

在简化的方式,所有的UIViewController会以同样的方式似乎消失了。如果任何视图中加入作为

1)addSubView方法:

[self.view addSubView:MyView的];

它将由

除去

[MyView的removeFromSuperView];

2.)它堆到navigationController

[self.navigationController pushViewController:objctOfYourViewController动画:YES];

该视图将弹出堆栈作为

[self.navigationController popViewControllerAnimated:YES];

3。)呈现模态视图

[self presentModalViewController:objctOfYourViewController animated:NO];

这将作为

去除[自dismissModalViewControllerAnimated:YES];

现在,就在您添加视图的方式中,您应该将它们移除。

+0

那么,这个方法必须在控制器B中。然后在调用这个方法来显式地填充控制器B(哪个工作)之后,我们如何取消分配控制器B(它本身)?显然,控制器B不能释放自己。 – SmallChess

+0

查看编辑答案 – mayuur

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回到C,那么,

[self.navigationController popToRootViewControllerAnimated:YES]; 
+0

您不能将自己添加为根控制器,这会崩溃。 – SmallChess

+0

检查编辑答案,这一定会帮助你.. –

相关问题