我有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的以下行调用以消除AViewcontroller
和BViewController
。 ,
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
这等于在
dismissViewController:
上调用BaseViewController
。这是消除AViewController
的正确方法