2012-07-08 94 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 ...]不適用於我。