使用presentViewController解除viewController

时间:2013-10-31 02:02:31

标签: ios iphone ios5

我有三个ViewControllers,它的顺序是(一个呈现C的礼物B), 当我留在C viewController中时,我必须将ViewController解除为B viewController。

对于C viewController,其presentViewCOntroller是B viewController

当然,我可以使用

[self dismissViewControllerAnimated:YES completion:NULL];//self means C ViewController

但我想知道我也可以使用以下方法:

[self.presentingViewController dismissViewControllerAnimated:YES completion:NULL];

因为C的presentViewController是B ViewController,但是它的效果相同。 self意味着C ViewController而self.presentingViewController意味着B ViewController,但他们也做了同样的工作

第二个问题是我不能使用以下方法连续关闭两个viewController:

  [self dismissViewControllerAnimated:YES completion:^{
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
}]; //self means C viewController

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

见文档:

  

呈现视图控制器负责解除视图   它呈现的控制器。 如果您在展示的视图中调用此方法   控制器本身,它会自动将消息转发到   呈现视图控制器。

答案 1 :(得分:2)

  

当然,我可以使用

[self dismissViewControllerAnimated:YES completion:NULL];//self means C ViewController

这只会消除您C,而不是您想要的B

  

但我想知道我也可以使用以下方法:

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];

是的,这很有效。如有疑问,请尝试一下。

  

第二个问题是我不能使用以下方法连续关闭两个viewController:

[self dismissViewControllerAnimated:YES completion:^{
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
}]; //self means C viewController

这不是问题。无论如何,它不起作用的原因是,在你解雇自己后,你的presentingViewControllernil。您需要将其存储在临时变量中。

UIViewController *gp = self.presentingViewController.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^{
    [gp dismissViewControllerAnimated:YES completion:nil];
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}];

当然,两者会有不同的动画,你需要决定你喜欢哪种动画。

答案 2 :(得分:0)

请检查:self.presentingViewController.presentingViewController是否是一个viewController。

如果没有,我认为你需要使用委托或处理程序。

就我而言,我使用tabbarcontroller作为rootViewController。当我使用self.presentingViewController.presentingViewController时,我得到了rootViewController(tabbarcontroller),它对presentViewControler方法没有响应。