我有3个viewControllers-BaseViewController-> AviewController-> BviewController。

AviewController在BaseViewController上以模态呈现,而BviewController在AviewController上以模态呈现。

在AviewController中,如果我调用[self dismissViewControllerAnimated:Completion],则会同时关闭AviewController和BviewController。

在BviewController中,如果我调用[self.presentingViewController dismissViewControllerAnimated:completion],则只会关闭BviewController。
为什么不关闭AviewController?

这个概念错误吗AviewController = BviewController.presentingViewController。 ?

我还尝试在BviewContrroller中采用AviewController的弱引用,并尝试将其关闭。但是仍然只有BviewController被忽略。
[AviewControllerReference dismissViewControllerAnimated:completion]
我对这个概念的理解有什么错误吗?

最佳答案

来自苹果文档:

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


因此,您必须在呈现VC时调用此方法以关闭呈现的控制器。没有呈现控制器本身。正如您在上面的粗体测试中看到的那样,如果您在提供的VC上调用了它,它将自动将方法转发给现有的VC。

因此,为了回答您的问题,

在BViewController的以下行调用以消除AViewcontrollerBViewController。 ,

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

这等于在dismissViewController:上调用BaseViewController。这是消除AViewController的正确方法

07-27 18:53