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