是的,我知道有完全相同的问题,但我想用双重动画来做这件事。 How to Dismiss 2 Modal View Controllers in Succession?
我的代码与上面的问题相同,
视图控制器A(在导航控制器中) - 模态视图控制器B - 模态视图控制器C
这里是伪代码
notification to B (as delegate) // I changed order of this two lines,
dismiss C *without* animation // but it was same.
(notification from C, in B)
dismiss B *with* animation
如果我在解雇C时使用动画,它不起作用,B将不会被解雇,因为解雇C的动画正在播放。
问题是:如果有动画播放,我无法启动另一个动画。
我可以连续播放动画吗?
这不仅是解除动画的问题,它还可以应用于其他iOS动画。
P.S:我想我可以使用计时器等到第一个动画结束,但它很脏而且不稳定,不是吗?小谈:在我的节目中,
答案 0 :(得分:23)
iOS 5.0及更高版本:
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
如果你有:
,这是有效的A - starting view controller
M1 - modally presented by A
M2 - modally presented by M1
将这行代码放在M2的视图控制器类中(以及一个按钮或其他任何东西来激活它),它将通过层次结构“到达”并告诉A到dismissViewControllerAnimated:...
然而,Rahul Vyas的回答可能是一种更好的方法,适用于在“A”和最后一个Modal视图之间有未知数量的模态视图控制器的情况。
答案 1 :(得分:7)
您可以生成NSNotification,然后从第一个模态出现的根目录中关闭第一个模态视图控制器,所有其他模式将自动消失。我在我的一个应用程序中完成了这个。
答案 2 :(得分:0)
当您希望视图关闭模态视图时,可以使用[self dismissModalViewControllerAnimated:(BOOL)]。如果你在两个控制器中调用它,它应该工作。我自己没有尝试过,但似乎合乎逻辑。
我必须补充一点,如果你需要在一行中呈现多个模态视图,你应该考虑为其中一些使用不同的范例。例如,登录视图可以是警报视图而不是模态视图控制器。
答案 3 :(得分:0)
我遇到了类似的问题,试图让动画连续工作。我一直想尝试以下方法:
如果在调用performSelectorOnMainThread的内部调用第二个动画(即dimiss B),该怎么办?这会让我觉得第二个动画会被迫等待第一个动画完成。
我还没有测试过它。祝你好运 - 我对你提出的解决方案非常好奇。
答案 4 :(得分:0)
您可以使用
删除2个视图[AviewController dismissModalViewControllerAnimated:YES];
这里AviewController是A的对象。 希望这会对你有所帮助。
答案 5 :(得分:0)
[self dismissModalViewControllerAnimated:(BOOL)]
不起作用。第二个动画不会触发。在iOS 5中,您可以使用[self dismissViewControllerAnimated:YES completion:^{}];
,但这不向后兼容4.0。我只是成功调用了一个委托方法,在呈现新模式之前关闭了模态视图控制器。
答案 6 :(得分:0)
以下是我的工作,我有A-> B,然后是容器视图" C"结束B.然后我想让C解雇回A,
对我有用的最佳方式是在视图C中调用此操作
self.presentingViewController?.dismiss(animated: true, completion: {})
self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: {})
这解雇了模态C,然后以同步顺序解散B.它的应用感觉更好用