我有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]
我对这个概念的理解有什么错误吗?
答案 0 :(得分:5)
来自Apple docs:
呈现视图控制器负责解除视图 它呈现的控制器。 如果您在呈现的视图上调用此方法 控制器本身,它会自动将消息转发给 呈现视图控制器。
因此,您必须在呈现VC时调用此方法以关闭所呈现的控制器。没有呈现控制器自己。正如您在上面的粗体测试中所看到的,如果您在呈现的VC上调用它,它会自动将该方法转发到prsenting VC。
所以要回答你的问题,
在BViewController上调用以下行以关闭AViewcontroller
和BViewController
。 ,
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
这与您dismissViewController:
上的BaseViewController
调用相同。这是解雇AViewController