iPhone - viewController调用viewController

时间:2011-08-22 00:25:26

标签: iphone ios uiviewcontroller

我有3个viewControllers A,B和C.

我在vcA上,我使用

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

当vcB可见时,我推vcC。

现在我在vcC内部并想同时删除(或弹出)vcC和vcB并直接转到vcA。我不想去vcB。我该怎么做?

是否可以在显示vcC时静默地从堆栈中删除vcB?

感谢

5 个答案:

答案 0 :(得分:2)

我认为你可以将它们作为数组混乱

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

答案 1 :(得分:2)

你试过了吗?

[self.navigationController popToRootViewControllerAnimated:YES];

答案 2 :(得分:2)

如果您知道A始终是您推送的第一个控制器,那么您应该可以这样做:

[self.navigationController popToRootViewControllerAnimated:YES]

或者如果在A之前堆栈上可能还有其他控制器,您可以执行以下操作:

[self.navigationController popToViewController:viewControllerA animated:YES]

References

答案 3 :(得分:0)

您可以在-popToRootViewControllerAnimated: ...

上致电UINavigationController

[self.navigationController popToRootViewControllerAnimated:YES];

答案 4 :(得分:0)

如果A是root,则为popToRootViewController。

如果没有,假设您遵守Apple对未记录的API使用的限制,我建议不,你不能从C列表中弹出C ans B.

对视图堆栈的任何直接操作都是hackish,并导致许多潜在的问题

你最好的选择是从C设置一个全局标志,弹出它,并在B的viewWillAppear(将出现,出现非DID),你检查所述标志的状态,如果设置,立即弹出到A.

视图B不会出现,最坏的情况是在C和A之间会产生一个小的,可能难以察觉的延迟。