iPhone - 的viewController调用的viewController

问题描述:

我有3个viewControllers A,B和CiPhone - 的viewController调用的viewController

我在VCA和我使用

[self.navigationController pushViewController:vcB animated:YES]; 

虽然VCB是可见的,我推VCC推VCB。

现在我里面VCC,想删除(或POP)都VCC和VCB在同一时间,直接进入VCA。我不想去vcB。我怎么做?

是否有可能当正在显示VCC从堆栈自动删除VCB?

感谢

我认为你可以惹他们作为一个数组

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[viewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = viewControllers; 
+0

Yesssssssssssssssssssssssssssssssssssssssssssssssssss !!!!!!!!!!!!!!!而已!谢谢!!!!! – SpaceDog

+0

我们知道这是否尊重生命管理周期?如在,将被删除的意见得到他们的所有卸载回调激活? –

+0

由于您仍在引用实际值并仅创建一个可变数组并删除单个值,所以一切仍应起作用。但是将其从该阵列中删除可能会在其上留下保留。我会通过附加到仪器并反复执行该功能来验证所有功能是否正常工作。如果你在这个动作上有内存泄漏,那么我会以这种方式释放从数组中删除的项目。除此之外,它应该正常工作。 –

你尝试过:

[self.navigationController popToRootViewControllerAnimated:YES]; 
+0

是的,这会删除vcC而不是vcB。 – SpaceDog

你可以只调用-popToRootViewControllerAnimated:UINavigationController ...

[self.navigationController popToRootViewControllerAnimated:YES];

如果A是根,popToRootViewController。

如果没有,假设你保持对苹果的未公开的API使用限制,我建议不,你不能从列表中从C

弹出两个çANS B中的视图堆叠中的任何直接操纵会导致很多潜在的问题

最好的办法是从C设置一个全局标志,弹出它,并在B的viewWillAppear(将出现,非DID出现),您检查状态说标志,如果设定,马上弹出来A.

视图B就不会出现,在最坏的情况会引起一个小的,大概imper C和A

+0

谢谢。显然你可以使用Jason的反应正式破解堆栈。不管怎么说,还是要谢谢你。 – SpaceDog

之间ceptible滞后如果你知道A始终是你把第一个控制器,那么你应该能够做到:

[self.navigationController popToRootViewControllerAnimated:YES]

或者,如果有可能对其他控制器A前堆栈,你可以这样做:

[self.navigationController popToViewController:viewControllerA animated:YES]

References

+0

多么漂亮,不知何故从未注意到这种方法。 –

+0

当用户按下后退按钮时,你会如何处理这种情况?没有简单的方法在那里设置钩子。 – Akshay