连续关闭两个视图控制器

4
我尝试了两种方法连续解雇两个视图控制器,但只有一个被解雇了,第二个没有被解雇。
方法1
-(void) LoginDone:(NSNotification *)notif 
 {
 [self dismissViewControllerAnimated:YES completion:NULL];   //previous viewcontroller
 [self dismissViewControllerAnimated:YES completion:NULL];   //current viewcontroller
  }

方法2

-(void) LoginDone:(NSNotification *)notif 
{
[self dismissViewControllerAnimated:YES completion:NULL];
 [[NSNotificationCenter defaultCenter] postNotificationName:@"LoginDone2" object:nil];

 }

-(void) LoginDone2:(NSNotification *)notif 
{
     [self dismissViewControllerAnimated:YES completion:NULL];


 }

我需要找到一种方法来连续关闭之前的视图控制器和当前的视图控制器。
6个回答

8

这是一个旧问题,但它似乎正是我目前遇到的问题。 这是我所做的:

    [self.presentingViewController.presentingViewController
     dismissViewControllerAnimated:YES completion:nil];

对我来说这很有效,希望能对某些人有所帮助。


5
通过调用
 [self dismissViewControllerAnimated:YES completion:NULL];

你正在告诉self关闭它所呈现的视图。两次告诉同一个self对象关闭它所呈现的视图不会改变结果。换句话说,根据您对代码的评论,self不能同时代表“当前视图”和“上一个视图”。self只是一个单独的控制器,表示单个视图,无论是当前视图还是上一个视图。
要解决这个问题,您应该将dismissViewControllerAnimated发送到self(我假设是呈现顶层视图的self)和呈现前一个视图的其他视图控制器对象。
换句话说,我期望像这样的东西:
-(void) LoginDone:(NSNotification *)notif 
{
   [self dismissViewControllerAnimated:YES completion:NULL];
   [self.previousController dismissViewControllerAnimated:YES completion:NULL];
}

实际上,您可以向第二个视图控制器发送一条消息,两个视图都将被关闭(source):

如果您连续呈现多个视图控制器,并因此构建了一个呈现的视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法会关闭其直接子视图控制器和该子视图控制器上方的所有视图控制器。当发生这种情况时,只有最顶部的视图以动画方式关闭;任何中间视图控制器都将被简单地从堆栈中移除。最顶部的视图使用其模态转换样式进行关闭,该样式可能与堆栈中较低的其他视图控制器使用的样式不同。


1
我喜欢JPetric的想法,但首先您必须关闭当前视图控制器的视图,然后才能关闭呈现视图控制器的视图。
    [self dismissViewControllerAnimated:NO completion:^(void) {
        [self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
    }];

1

我知道这是一个老问题,但也许有人会寻找解决方案,所以在这里提供:

-(void) closeModalViews 
{
    [previousVC dismissViewControllerAnimated:YES completion:^(void) {
        [self dismissViewControllerAnimated:YES];
    }];
}

很好的答案,但首先您必须关闭当前视图控制器的视图,然后才能关闭呈现视图控制器的视图。 - etayluz

0

在返回到第一个视图控制器时,您可以在跳转的视图控制器上使用self.view.hidden=true;。如果不隐藏,使用[self.presentingViewController dismiss...]对我来说无法正常工作。


0

据我所理解,您正在尝试以下操作:

  1. 有两个视图控制器。
  2. 你想让它们都消失。
  3. 另一个控制器出现。

但事实上只有一个控制器被显示,为什么您需要关闭两个呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接