这里的弹出背面有两个视图控制器的技术,它具有当前视图控制器及其navigationController属性的你,只要你做的第一个弹出走开的一个类似的问题:
// pop back 2 controllers on the stack to the setup screen
//
// locally store the navigation controller since
// self.navigationController will be nil once we are popped
//
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it's popped off
//
[[self retain] autorelease];
// Pop back 2 controllers to the setup screen
//
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
或者,
setViewControllers:动画:在视图控制器的导航控制器堆栈可以直接“当事人”取代 目前导航控制器管理 与的视图控制器指定项目。
- (无效)setViewControllers:(NSArray的*)动画viewControllers:(BOOL)动画参数 viewControllers的视图控制器 到堆叠放置。该阵列中控制器 的前后顺序 代表导航堆栈中控制器 的新的 自下而上的顺序。因此,添加到阵列的最后一项变为 导航堆栈的顶部项目。 动画如果是,则动画推动 或弹出顶视图控制器。 如果否,请在没有任何动画的情况下更换视图控制器 。讨论您可以使用此方法更新 或 替换当前视图控制器 堆栈,而无需明确推送或弹出每个 控制器。此外, 此方法允许您更新控制器组 而不激活 更改,当您想要将导航控制器返回 以前的状态时,此更改可能适用于启动时间 。
如果动画被启用,该方法 决定过渡的这类型 进行基于项目阵列中的最后一个项目 是否已经在 导航堆栈。如果视图 控制器当前处于堆栈中,但不是最上面的项目,则此 方法使用弹出转换;如果视图 控制器当前处于堆栈中,如果它是 最上面的项目,则不执行转换 。如果视图控制器 不在堆栈上,则此方法使用 推送转换。只执行一个转换 ,但是当转换 完成时, 堆栈的全部内容将被替换为新视图 控制器。例如,如果 控制器A,B和C在 堆栈上并且您设置了控制器D,A, 和B,则此方法使用弹出窗口 转换,并且生成的堆栈 包含控制器D,A和B 。
可用性在以后的iOS 3.0和 。宣布 UINavigationController.h
因此,直接“消失”视图控制器导航堆栈下您,在您的视图控制器的viewDidLoad,你可以这样做:
NSMutableArray *VCs = [self.navigationController.viewControllers mutableCopy];
[VCs removeObjectAtIndex:[VCs count] - 2];
self.navigationController.viewControllers = VCs;
为什么你wan't做到这一点? – 2011-02-13 18:07:06
应用程序的要求。或者,我可以弹出当前的视图控制器,然后推下一个,但当前视图将在完成推送之前释放。 – TigerCoding 2011-02-13 18:10:25