我有三个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
感谢您的帮助!
答案 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
这不是问题。无论如何,它不起作用的原因是,在你解雇自己后,你的presentingViewController
是nil
。您需要将其存储在临时变量中。
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方法没有响应。