我有一个不在导航堆栈上的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”控制器中启动导航堆栈的方式。我需要回到家庭控制器。
答案 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];