Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从另一个modalviewcontroller关闭modalviewcontroller_Iphone_Modalviewcontroller - Fatal编程技术网

Iphone 从另一个modalviewcontroller关闭modalviewcontroller

Iphone 从另一个modalviewcontroller关闭modalviewcontroller,iphone,modalviewcontroller,Iphone,Modalviewcontroller,我正在演示另一个modalviewcontroller的modalviewcontroller。当我关闭第二个modalviewcontroller时,第一个和第二个modalviewcontroller都应该被关闭。我试图访问第一个modalview,就像 [self.view.superview dismissmodalviewcontroller]; 但它显示出错误。从第二个modalViewController获取对第一个modalViewController的引用并从中调用dis

我正在演示另一个modalviewcontroller的modalviewcontroller。当我关闭第二个modalviewcontroller时,第一个和第二个modalviewcontroller都应该被关闭。我试图访问第一个modalview,就像

[self.view.superview dismissmodalviewcontroller];  

但它显示出错误。从第二个modalViewController获取对第一个modalViewController的引用并从中调用dismise方法的正确方法是什么?

尝试
[self.parentViewController dismissModalViewControllerAnimated:YES]

这将关闭两个模态视图控制器

该方法是
UIViewController
类的一部分,而不是
UIView
的一部分。所以你需要这样做

[self.parentViewController dismissModalViewControllerAnimated:YES];
而不是在self.view.superview上调用它,它是这样的

A表示B。此处,A为B的父级(此处,A.modalViewController为B,B.parentViewController为A)

B表示C。这里,B是C的父级(这里,B.modalViewController将是C,C.parentViewController将是B)

根据苹果公司的指导方针,其上级控制器有责任解雇其下级控制器

所以,如果您想关闭控制器C,可以在C.parentViewController调用dismissModalViewController。由于C的父对象是B,因此B将忽略它呈现的模态(子)控制器

但是你甚至想解雇B。解雇B是B的父母的责任。所以你需要说[B.parentViewController DismissModalViewController DismissModalViewController:YES]


因此,您需要从C获取B作为C.parentViewController(不要忘记在这里进行类型转换)。然后你说[B.parentViewController解除ModalViewController激活:是]

为了进一步澄清,您可能需要以下内容:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];

我刚刚找到了答案,也许会有帮助 我们只需要一行代码

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];

遗憾的是,视图总是切换到堆栈中的第一个模式,然后执行动画

我用自定义动画修复了它:

        let transition: CATransition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionReveal
        transition.subtype = kCATransitionFromBottom
        self.view.window!.layer.add(transition, forKey: nil)
        self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)

在已经问了25个问题之后,我认为您应该学习如何在StackOverflow上正确设置格式。如果你设置问题的格式以便于阅读,人们会更倾向于阅读和回答。当你编写问题时,用鼠标选择整个代码部分,然后单击“{}”'按钮在顶部..这是格式化代码的方法..谢谢以后会保留它…顺便说一句,我仍然卡住了。有人在那里请帮助。我尝试了这种方法。但这似乎不起作用。这是视图的层次结构。tableviewcontroller->modalviewcontroller->modalviewcontroller这不起作用,尝试过这样做,但只显示了一个视图解散。第一个modalview无法运行。还有其他方法吗?@sujith1406:那么你应该有一个
[自我解散ModelViewController:是]已经存在。尝试将其替换为
[self.parentViewController dismissModalViewControllerAnimated:YES]取而代之。从链接文档中可以看出:如果您连续显示多个模态视图控制器,从而构建一个模态视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法将取消其直接子视图控制器以及堆栈中该子视图控制器上方的所有视图控制器。很抱歉,再次打扰您,当我得到你的答案时,我首先替换了[self DismissionModelViewControllerAnimated:YES];使用[self.parentViewController DismissModelViewController激活:是];但在这两起案件中,只有第二名莫达尔维被解雇。