2012-07-08 62 views
4

我尝试2种方式解雇2个viewcontrollers连续,但其中只有一个被开除不是第二个驳回2的ViewController连续

方法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。

回答

0

至于我能理解你正在尝试类似下面的东西:

  1. 有2个视图控制器。
  2. 你想让它们都消失。
  3. 另一个控制器的用武之地。

但事实却是只显示一个控制器,你为什么会需要再辞退2?

5

通过调用

[self dismissViewControllerAnimated:YES completion:NULL]; 

你告诉self驳回其提出的观点。告诉两个相同的self对象来消除它所呈现的视图,不会改变结果。换句话说,self不能根据您对代码的评论同时代表“当前视图”和“上一个视图”。 self只是代表单个视图的单个控制器,既可以是当前视图,也可以是前一个视图。

为了解决这个问题,你应该送dismissViewControllerAnimatedself(即呈现最上面的观点,我认为)到呈现的一个视图中其他视图控制器对象。

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

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

其实,你可以发送一封邮件到第二个视图控制器和两个视图将被解雇(source):

如果您连续呈现多个视图控制器,并因此构建一堆呈现的视图控制器,则在堆栈中较低视图控制器上调用此方法将取消其立即子视图控制器以及堆栈上该子视图上方的所有视图控制器。当发生这种情况时,只有最顶级的观点才会以动画形式被解雇;任何中间视图控制器都可以简单地从堆栈中移除。最顶层的视图使用其模式转换样式被解散,这可能与堆栈中较低视图控制器使用的样式不同。

1

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

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

很好的答案,但首先你必须关闭当前视图控制器的视图,然后才可以关闭呈现视图控制器的视图。 – etayluz 2014-02-23 22:38:13

1

我喜欢JPetric的想法,但首先你必须关闭当前视图控制器的看法只有这样你才能解散呈现视图控制器的视图。

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

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

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

而且它为我工作。我希望对某人有用。

0

您可以使用self.view.hidden = true;在跳动的视图控制器上同时动画回到第一个视图控制器。如果没有隐藏,使用[self.presentingViewController dismiss ...]不适用于我。