连续解除2个ViewController

时间:2012-07-08 05:58:24

标签: ios viewcontroller

我尝试了两种方法连续解雇2个视图控制器,但只有一个被解雇而不是第二个

方法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];


 }

我需要找到一种方法来连续关闭先前的viewcontroller和当前的viewcontroller。

5 个答案:

答案 0 :(得分:8)

现在这是一个老问题,但它似乎正是我目前遇到的问题。 我在这里做了什么:

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

它对我有用。我希望它对某人有用。

答案 1 :(得分:5)

致电

 [self dismissViewControllerAnimated:YES completion:NULL];

你告诉self驳回它所呈现的观点。告诉两次相同的self对象取消它所呈现的视图,不会改变结果。换句话说,根据您对代码的评论,self无法同时代表“当前视图”和“上一个视图”。 self只是一个控制器,代表单个视图,无论是当前视图还是前一个视图。

要解决此问题,您应该将dismissViewControllerAnimated发送给self(我假设最顶层的视图,其他查看显示上一个视图的控制器对象。

换句话说,我希望这样的事情:

-(void) LoginDone:(NSNotification *)notif 
{
   [self dismissViewControllerAnimated:YES completion:NULL];
   [self.previousController dismissViewControllerAnimated:YES completion:NULL];
}

实际上,您只能向第二个视图控制器发送一条消息,并且两个视图都将被解除(source):

  

如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。发生这种情况时,只有最顶层的视图以动画方式被删除;任何中间视图控制器都可以从堆栈中删除。最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我喜欢JPetric的想法,但首先你必须忽略当前视图控制器的视图,然后才能忽略呈现视图控制器的视图。

    [self dismissViewControllerAnimated:NO completion:^(void) {
        [self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
    }];

答案 4 :(得分:0)

据我所知,你正在尝试下面的事情:

  
      
  1. 有2个视图控制器。
  2.   
  3. 你想让它们都消失。
  4.   
  5. 另一个控制器进来。
  6.   

但事实上只显示了一个控制器,为什么你需要解雇2呢?