2014-01-12 112 views
0

在我的應用程序中,我想從視圖控制器堆棧中刪除視圖控制器,然後導航到特定的視圖控制器。假設我有A,B,C,D,E視圖控制器堆棧。我希望刪除E和然後轉到C.我使用下面的代碼removeFromParentViewController從堆棧中刪除所有視圖控制器

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 


for (UIViewController *aViewController in allViewControllers) 
    { 
     if ([aViewController isKindOfClass:[noNetworkViewController class]]) 
     { 
      [aViewController removeFromParentViewController]; 
     } 
    } 


    NSMutableArray *allbViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 

    for (UIViewController *aViewController in allbViewControllers) 
    { 
     if ([aViewController isKindOfClass:[messageViewController class]]) 
     { 
      [self.navigationController popToViewController:aViewController animated:NO]; 
     } 
    } 

第一個for循環擦除從堆棧中所有視圖控制器。有沒有什麼我在這裏做錯了。請告訴我。

+0

你的其他視圖控制器是否繼承自noNetworkViewController? – connor

+0

去C應該刪除D和E. – rmaddy

+0

@ connor-否。它不會繼承。 –

回答

0

如果您使用的是流行音樂,則不必從其父視圖中刪除其他視圖。您只需彈出視圖控制器陣列中的視圖控制器,並從堆棧頂部返回兩個視圖控制器。

我會舉一個代碼示例,但我不在我的開發計算機上。如果沒有人在明天之前回答更多細節,我會添加一些代碼。

-Edit - 這是我用來回彈2個視圖控制器的代碼行。我相信這可以做更好的方式,但它的工作。

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:[self.navigationController.viewControllers count]-3] animated:YES]; 
0

您是否驗證過父視圖控制器屬性是由導航控制器填充的?父視圖控制器通常用於UIViewControllerContainment協議一致性。 UINavigationController不符合該協議,這使我認爲你不能通過調用該方法從導航控制器中刪除它。您可以在navigationController上使用setViewControllers:animated:來分配控制器。只需使用您用所有viewController創建的數組。

1

你不應該使用removeFromParentViewController:來瀏覽導航控制器的視圖控制器棧。永遠。這是錯誤的。

此外,沒有理由循環瀏覽控制器的視圖控制器堆棧並逐個彈出它們。有像popToViewController:animated:和popToRootViewController這樣的方法,可以讓你用一次調用彈出到堆棧中的任意視圖控制器。

相關問題