2012-03-27 59 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