2011-08-19 65 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

檢查編輯答案,這一定會幫助你.. –

相關問題