2012-03-27 37 views
0

因此,我有一個導航控制器,我在屏幕上按下了一個視圖,一個設置視圖,但是我想將它從層次結構中移除,所以當新的viewcontroller進入屏幕並按下後退按鈕時,它會將其返回主菜單。使用Xcode 4.2從navcontroller中刪除一個視圖,然後推新視圖?

我嘗試這樣做:

[self.navigationController popViewControllerAnimated:NO]; 
[self.navigationController pushViewController:tabBar animated:YES]; 

但該的viewController只是彈出和新的沒有出現。

回答

3

你應該嘗試修改navigationcontrollers視圖控制器陣列狀方式如下:

[self.navigationController pushViewController:tabBar animated:YES]; 
NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 
[VCs removeObjectAtIndex:[VCs count] - 2]; 
[self.navigationController setViewControllers: VCs]; 

也許動畫將被打破。如果發生這種情況,您應該將導航控制器VC數組修改後的部分移動到所呈現的VC的viewDidAppear方法。

0

問題是,只要您調用popViewControllerAnimated,就會釋放自我:推送呼叫然後向nil發送消息。

您可以先將self.navigationController分配給本地變量,然後將其用於推送和彈出。

或者,這有點破解,但在此之前,你可以調用[[self retain] autorelease]給它一個額外的保留,以便它不會消失,直到運行循環結束。

+0

請注意,'popViewControllerAnimated:'返回彈出的控制器 - 它不會解除分配,直到返回值獲取(自動)釋放,或者在ARC超出範圍之外。 (如果你喜歡,你可以將它粘貼到一個局部變量中,但是這不會讓你訪問導航控制器,因此,堅持引用它就不失爲一個好主意。)另外,'[[self retain] autorelease ]'在ARC下不可用,並且一旦self從該nab控制器彈出,保留self將不會將'self.navigationController'保存爲零。 – rickster 2012-03-27 06:50:25

相關問題