如何连续关闭2个模态视图控制器?

She*_*lam 38 iphone cocoa-touch objective-c uiviewcontroller uikit

我有2个视图控制器以模态方式呈现.

A presents B which presents C.
Run Code Online (Sandbox Code Playgroud)

当我解雇CI时也想解雇B. 但我不知道该怎么做:

解雇C:

[self dismissModalViewControllerAnimated:YES]
//[delegate dismissB] //this doesn't work either when i create a delegate pattern
Run Code Online (Sandbox Code Playgroud)

现在我离开了B.如何从C中解雇B?

And*_*ies 109

刚刚发现你需要在iOS 5中使用presentViewController.

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

A - > B - > C.

在模态C中运行上面的代码将带您回到A.

  • `... dismissModalViewControllerAnimated`现已弃用.尝试`[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];` (4认同)

n13*_*n13 14

这对我有用,非常简单

// Call inside View controller C    
self.presentingViewController?.dismissViewControllerAnimated(false, completion: nil)
self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

说明:

如果你在C上调用dismiss,它只能删除C.如果你在B上调用dismiss,它会做正确的事:删除最顶层的模态视图控制器.因此,第一个调用将删除C(没有动画).第二次调用删除B.

从C访问视图控制器B的最简单方法是使用presentsViewController变量.


小智 12

在B. Put:

[self dismissModalViewControllerAnimated:NO];
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

只运行一个动画.


Mic*_*ler 9

尝试使用B中的下一个代码(在解雇C之后,就像你已经做的那样):

[self.parentViewController dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

重要提示:
此行之后的方法中不要执行任何操作.
这个视图控制器(B)可能会被释放并解除分配......

更新:
从iOS7开始,不推荐使用上述方法.
请改用下一个方法:

[self.parentViewController dismissViewControllerAnimated:YES completion:^{ /* do something when the animation is completed */ }];
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个,但它只是简单地解散C. B仍然可见. (3认同)
  • 尝试在没有动画的情况下解雇C,然后用动画解雇B ... BTW,这个解雇代码位于何处(哪个类以及如何调用此方法)? (3认同)

Vic*_*ius 6

检查这是否为swift:

self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil);
Run Code Online (Sandbox Code Playgroud)


The*_*y77 6

迅速4

self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil);