dismissViewControllerAnimated:完成:概念?

时间:2014-04-10 12:28:34

标签: ios uiviewcontroller modalviewcontroller

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

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

1 个答案:

答案 0 :(得分:5)

来自Apple docs:

  

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

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

所以要回答你的问题,

在BViewController上调用以下行以关闭AViewcontrollerBViewController。 ,

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

这与您dismissViewController:上的BaseViewController调用相同。这是解雇AViewController

的正确方法