使用 presentingViewController 关闭 viewController
Posted
技术标签:
【中文标题】使用 presentingViewController 关闭 viewController【英文标题】:dismiss viewController by using presentingViewController 【发布时间】:2013-10-31 02:02:31 【问题描述】:我有三个 ViewController,它的顺序是(A 呈现 B,呈现 C), 当我留在 C viewController 时,我必须将 ViewController 解散到 B viewController。
对于C viewController,它的presentingViewCONtroller是B viewController
当然,我可以使用
[self dismissViewControllerAnimated:YES completion:NULL];//self means C ViewController
但我想知道我也可以使用以下方法:
[self.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
因为C的presentingViewController是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
感谢您的帮助!
【问题讨论】:
【参考方案1】:当然,我可以使用
[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];
];
当然,两者会有不同的动画,你需要决定你喜欢哪一个。
【讨论】:
谢谢你的第二个回答,很抱歉我没有对第一个问题进行区分。我只是想知道 self 和 self.presenting 代表不同的对象,但它们可以做同样的工作【参考方案2】:查看文档:
呈现视图控制器负责关闭视图 它呈现的控制器。 如果您在呈现的视图上调用此方法 控制器本身,它会自动将消息转发到 呈现视图控制器。
【讨论】:
【参考方案3】:请检查:self.presentingViewController.presentingViewController 是不是 A viewController。
如果没有,我认为您需要使用委托或处理程序。
在我的例子中,我使用了一个 tabbarcontroller 作为 rootViewController。当我使用 self.presentingViewController.presentingViewController 时,我得到了 rootViewController (tabbarcontroller),它对 presentingViewControler 方法没有响应。
【讨论】:
以上是关于使用 presentingViewController 关闭 viewController的主要内容,如果未能解决你的问题,请参考以下文章
presentingViewController 是不是与presentingViewController 一起旋转
presentedViewController 和 presentingViewController 以及 dismissViewControllerAnimated 的使用
“GIDSignIn”类型的值没有成员“presentingViewController”