2015-04-01 54 views
0

我是IOS的新手。 我的问题是,我有一些视图控制器作为NavigationController,mainVC,VC1,VC2,VC3,CameraVC。在cameraVC我有一个完成的按钮行动doneClicked。这些全部视图控制器都在NavigationController中推送。呈现VC1,而不是推入导航控制器。 doneClicked函数实现poptorootviewcontroller。当我点击完成按钮,它让我到VC1但不是主VC。有什么办法,所以我可以弹出所有视图控制器到VC1,并在这之后自动关闭VC1到mainVC。poptorootviewcontroller并解雇mainViewController

+0

添加视图控制器堆栈,并弹出到第零索引 – Chandru 2015-04-01 12:53:29

回答

0

将您的MainVC设置为根视图控制器,并在IBAction of done按钮中使用代码弹出到MainVC。

[self.navigationController popToRootViewControllerAnimated:YES]; 

希望它有帮助。

+0

感谢彼得您的回应。其实我的主VC是添加在TabBarController,所以我不能让mainVC作为根视图控制器。有什么办法可以让协议/委托来执行一些操作,也可以解除视图控制器。 – Zeebok 2015-04-01 12:50:08

+0

你可以参考[这](http://stackoverflow.com/questions/14636891/dismissing-a-presented-view-controller) – iPeter 2015-04-01 12:58:54

0

为了弹出视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

并关闭呈现视图控制器

[自dismissViewControllerAnimated:NO完成:零]

0
[self.navigationController setViewControllers:@[mainVC]]; 

我觉得这个代码将在你的情况下工作。 iOS开发者库:

将当前由导航控制器管理的视图控制器替换为指定的项目。

- (void)setViewControllers:(NSArray *)viewControllers 
       animated:(BOOL)animated 

source

必须dissmiss现在视图控制器后,做到这一点。使用代理

现在让我们认为您的导航堆栈是空的,并且您的根目录是mainVC。你想呈现VC1就可以了。但是你应该给一个委托给mainVC的人,解散VC1后会发生什么。例如,您从mainVC中呈现VC1。并且你想在推出VC1之后推VC2。没关系,只是在mainVC中有一个委托,所以在这个方法中

[self.navigationController pushViewController:VC2]; 

目前的意见并不影响你的导航堆栈。它不在你的堆栈中。所以每次你从控制器中撤销它,你都应该委派一个控制器来解决解散后会发生的事情。

试试吧。 希望它有帮助。

+0

我怎么可以使用委托,而我在第四level.i推1vc然后第二届然后3日和4日。 。从第四级开始有什么办法可以实现协议。 – Zeebok 2015-04-01 13:28:38

+0

是的,但我应该知道你的导航地图是如何。让我编辑我的答案来解释一个场景。我会展示一个小例子。 – 2015-04-01 13:34:43

+0

@Zeebok,我认为你可以使用委托实现它。我使用通知popToRootVC和Dismiss,运作良好。 – dengApro 2017-08-12 11:09:06