有人可以解释UINavigationController的setViewController和popToViewController

时间:2011-11-17 17:18:02

标签: iphone uinavigationcontroller

我熟悉创建一个新的viewcontroller并将其推入堆栈的想法。到目前为止,我刚刚创建了一个视图控制器实例并推送它。现在我遇到了一个问题,我的3个不同的视图控制器是查看数据的相关方式。我的RootViewController有3个图标可供启动,当您按下图标时,您可以按下第一个视图控制器。我目前没有在一个数组中设置视图控制器,因为我不确定是什么购买或如何工作。

场景1:点击图标1(按vc1),点击vc1中弹出窗口中的表格,它将推送到vc3。然后你点击vc3中的某些内容,它将转到vc1。

场景2:点击图标3(按vc3),点击某些内容然后转到vc1。

所以我遇到的问题是在方案1中,似乎最有意义的是回弹到vc1所以他们没有堆栈的vc1 / vc3 / vc1并且正在查看数据两次像那。但是在方案2中,因为我从vc1的vc3 instd开始,所以我应该推送vc1。但是在这两种情况下,用户点击相同的东西从vc3转到vc1,那么如何判断它们来自哪个viewController才能推送或弹出到vc1?

所以我想我认为setViewControllers或popToViewController可能会派上用场,但我不确定这些是如何工作的,如果有一些简单的示例代码片段,有人可以提供给我开始(假设这种方法没问题)。谢谢!

2 个答案:

答案 0 :(得分:1)

UINavigationController允许您管理视图。 setViewController允许您设置哪个控制器处理您的视图。 popToViewController将当前视图控制器从堆栈中移出到指定视图。

IMO ......最后2个推广意大利面条逻辑,应该谨慎使用。

答案 1 :(得分:1)

根据您的描述,对我来说,您应该使用您推动和弹出的导航控制器。顺便说一句,导航栏不一定是可见的。

听起来有时你应该在推送下一个vc之前弹出当前的vc。您将需要检查viewControllers数组的计数 - 如果当前计数大于1,则在推送之前弹出,否则只需按下您在根视图控制器处。

或者,您可以在推送前每次使用popToRootViewControllerAnimated:NO。