我在使用模态视图控制器时遇到了问题。 我有一个父视图控制器,它是模态视图A的代理。在模态视图A中,我展示了模态视图B,并通过委托使模态视图A消失。
当模态视图B出现时,屏幕会变暗并且界面无法操作,但应用程序不会崩溃。我将动画设置为“NO”,但仍然出现相同的问题。
事件顺序:
- 父视图显示模态视图A
- 模态视图A在模态视图A控制器中展示模态视图B
- 父视图通过委托在模态视图A控制器中解除模态视图A
- 这就是我的界面挂起的地方,我可以看到模态视图B但无法点击或执行任何操作
我在使用模态视图控制器时遇到了问题。 我有一个父视图控制器,它是模态视图A的代理。在模态视图A中,我展示了模态视图B,并通过委托使模态视图A消失。
当模态视图B出现时,屏幕会变暗并且界面无法操作,但应用程序不会崩溃。我将动画设置为“NO”,但仍然出现相同的问题。
事件顺序:
[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];
通过让我的parentViewController作为代理,问题得到了解决。以下是我的步骤:
[parentView presentViewController:modalViewControllerA animated:YES]
[parentView dismissModalViewControllerAnimated:YES]
[parentView presentViewController:modalViewControllerB animated:YES]
//Modal B dismisses himself
[parentView presentViewController:modalViewControllerA animated:YES]
[modalViewControllerA presentViewController:modalViewControllerB animated:YES]
[modalViewControllerA dismissModalViewControllerAnimated:YES]
[parentView dismissModalViewControllerAnimated:YES]
[self dismissModalViewController...]
,直到我嵌套它们。幸运的是,我需要一个指向父视图控制器的本地属性指针,所以现在我使用[parentViewController dismiss...]
,这解决了嵌套问题!谢谢。 - Jay Imerman适用于 iOS 6+
和 - presentViewController:animated:completion:
[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil];
in Swift 2.1
you can try
self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
对我有效
视图A -> 视图B -> 视图C
将此代码应用于视图C,您将会回到视图A
简单:
关闭所有视图:
[self dismissModalViewController animated:YES];
[self dismissModalViewController animated:YES];
[self dismissModalViewController animated:YES];
[self dismissModalViewController animated:YES];
(每添加一个模态视图)
然后呈现一个新的模态视图控制器
可能经过很长时间,但是我遇到了同样的问题,这是唯一一个有答案的帖子。
我不明白您所说的将parentViewController的代理设置为self是不允许的意思。
目前我正在做的是
[self presentModalViewController:ViewControllerA animated:YES];
[self dismissModalViewControllerAnimated:YES];// inside ViewControllerA
[self presentModalViewController:ViewControllerB animated:YES];
[self dismissModalViewControllerAnimated:YES];// inside ViewControllerB
问题是在视图控制器A之后,视图控制器B的视图没有呈现。
谢谢。
我有一个主视图,需要显示一个模态视图1,在其中一个按钮呈现了模态视图2。看起来你也需要这样做。 但是在模态视图2中有一个按钮可以返回到主视图。
所以解决方案是: 主视图呈现UINavigationController,其根控制器为模态视图1。然后通过"[self.navigationController modalview2 animated:YES];"呈现模态视图2。
当模态视图2需要返回到主视图时,只需使用"[self.parentViewController dismissModalViewControllerAnimated:YES];",即可隐藏UINavigationController。
希望这很清楚。
关于dismiss(animated:completion:)方法的苹果文档。
在“讨论”部分中,它说:
any intermediate view controllers are simply removed from the stack.
Root -> A -> B -> C -> D ... -> Z
D
调用 dismiss
方法后,所有在 D
后面的视图控制器,例如: (E ... Z)
,将会从堆栈中移除。