dismissViewControllerAnimated:完成:概念?

AUK*_*4SO 1 uiviewcontroller modalviewcontroller ios

我有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]

我理解这个概念有什么错误吗?

sle*_*rfx 5

来自apple docs:

呈现视图控制器负责解除它所呈现的视图控制器.如果在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器.

因此,您必须在呈现VC时调用此方法以关闭所呈现的控制器.没有呈现控制器自己.正如您在上面的粗体测试中所看到的,如果您在呈现的VC上调用它,它会自动将该方法转发到prsenting VC.

那么要回答你的问题,

在BViewController上调用以下行来解除AViewcontrollerBViewController.,

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
Run Code Online (Sandbox Code Playgroud)

这对于呼唤dismissViewController:你来说是同等 的BaseViewController.这是解雇的正确方法AViewController