Ian*_*Ian 5 modal-dialog uiviewcontroller ios
我有一个自定义容器视图控制器:ContainerVC.它的工作是呈现两个内容视图控制器之一:ContentPortraitVC或者ContentLandscapeVC,根据当前的方向(尽管容器选择其视图的原因并不重要,我推测).ContentPortraitVC,在某些时候弹出ContentModalDetailVC.
因此,有两种不同的方法可以在这里显示新内容:
父母与子女的关系(通过唆使addChildViewController和移除removeFromParentViewController),
呈现和呈现的关系(通过发起presentViewController和删除通过dismissViewController).
如果ContainerVC添加ContentPortraitVC,然后显示ContentModalDetailVC,然后ContainerVC决定切换到ContentLandscapeVC,则ContentModalDetailVC保持可见(为什么在删除其父项时不删除?)
但是,当ContentPortraitVC被要求删除时ContentModalDetailVC,没有任何反应.模态显示保持不变.到底是怎么回事?
当您使用addChildViewController添加ContentPortraitVC:
一个.在ContentPortraitVC得到它的parentViewController属性集.
湾 然后(根据Apple文档)必须手动显示ContentPortraitVC视图.如果你遵循的文档,你可以将其作为一个做到这一点的孩子的的ControllerVC顶尖水平视图.
在ContentPortraitVC随后调用presentViewController显示ContentModalDetailVC.
一个.这设置了它的presentingViewController属性(在调试器中显示为_parentModalViewControllerivar - 注意ivar与属性不同),并设置(谁的ivar是)的presentedModalViewController属性.ContentPortraitVC_childModalViewcontroller
湾 查看明智的,在iPhone上的ContentModalDetailVC的看法将完全取代从意见ContentPortraitVC和ContainerVC,所以才有了模态视图控制器的视图是可见的.(iPad上,它的层的新的UI过顶,但作为一个兄弟的的ControllerVC看来,这又是父ContentPortraitVC的视图).
所以现在,你从过渡ContentPortraitVC到ContentLandscapeVC.
一个.IOS有点神奇.它知道你要删除的东西(ContentPortraitVC)presentedViewController当前是活动的,所以它改变了它的父级.它将值设置为nilon ContentPortraitVC,获取子(ContentModalDetailVC)并将其父级设置为新视图(ContentLandscapeVC).所以现在呈现模态视图的视图控制器不再是它的呈现视图控制器.它好像ContentLandscapeVC首先出现了!
湾 在观点方面,你按照苹果的文档在从视图改变ContentPortraitVC到ContentLandscapeVC.但你只是改变了视图的子ControllerVC视图.在iPhone上,模态视图控制器仍然是唯一显示的内容,因此进行更改不会在屏幕上执行任何操作.在iPad上,它确实(虽然您可能不会看到它,因为模态视图通常是全屏).
现在你来解雇模态视图.大概是你这样做了ContentPortraitVC,但它不再提及它呈现的东西.所以呼唤[self dismissViewController...什么都不做,因为ContentPortraitVC不再提出任何东西,对此的责任已经传递给了ContentLandscapeVC.
这就是发生的事情和原因.以下是该怎么做.
您可以手动重新连接委托当你从改变ContentPortraitVC到ContentLandscapeVC,那么后者则是试图解雇模态控制器的一个.
你可以让模态控制器解散自己[self dismissModalControllerAnimated:YES completion:nil].我将要求并回答另一个问题,为什么它有效(如果这看起来很奇怪,IOS如何知道解雇哪个?)
您可以ControllerVC使弹出模态视图并负责删除它.
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |