2011-09-22 103 views
2

我做它使用一個UINavigationController的應用程序,我切換到其他UIViewControllers如下:返回UINavigationController的第一個索引?

if(self.myViewController == nil){ 
    MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    self.myViewController = aViewController; 
    [aViewController release]; 
} 

AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.myNavController pushViewController:myViewController animated:YES]; 

我想這是創建一個堆UIViewControllers進入UINavigationController的,也許指數法的陣列?我想知道如何退回而不必一個一個回來。

例如,我通過幾個屏幕和一個按鈕進行航行,我希望返回第一個導航索引。我還想知道如何修改索引,查看,刪除以及與此問題有關的任何內容。

對不起,如果我沒有解釋清楚。

回答

8

你問了兩個問題。

首先是,我該如何回到我的第一個視圖控制器。正如@Thomas Clayson和@ender已經回答的那樣,您需要爲您的導航控制器對象提供popToRootViewControllerAnimated:方法。

其次是如何移動到視圖控制器堆棧中的特定索引。答案就是,你可以明確地設置viewControllers的數組。因此,您可以取出視圖控制器的當前列表,對其進行修改,然後將其設置回navigationController堆棧。它會重置堆棧併爲您移動到堆棧中的頂層項目創建動畫。

正是如此:

NSMutableArray *controllers = self.navigationController.viewControllers; 
[controllers removeObjectAtIndex:[controllers count] - 1]; //or whatever 
[self.navigationController setViewControllers:controllers animated:YES]; 
+0

需要閱讀才能結束的問題! :p –

4
[self.navigationController popToRootViewControllerAnimated:YES]; 

將帶你回到第一個視圖控制器(根視圖控制器)。

希望這有助於

+0

,如果我想喲去到navigationController的specifil指數? – karse23

6
NSArray *viewControllers = [[self navigationController] viewControllers]; 
    for (int i = 0; i < [viewContrlls count]; i++){ 
     id obj = [viewControllers objectAtIndex:i]; 
     if ([obj isKindOfClass:[yourViewControllername class]]){ 
      [[self navigationController] popToViewController:obj animated:YES]; 
      return; 
     } 
    } 

使用這個你可以回來到任何指定的viewController。

2

使用此

NSArray *viewContrlls=[[NSArray alloc] initWithArray:[[self navigationController] viewControllers]]; 
    id obj=[viewContrlls objectAtIndex:1]; 
    [[self navigationController] popToViewController:obj animated:YES]; 
    [viewContrlls release]; 
1

你可以回到第一個視圖與

[self.navigationController popToRootViewControllerAnimated:YES]; 

話雖這麼說,你也可以刪除特定視圖控制器,或瀏覽到您的視圖中的特定索引控制器,如果你看看這個例子。

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
// You can now manipulate this array with the methods used for NSMutableArray to find out/perform actions on the navigation stack 

[allViewControllers removeObjectIdenticalTo: removedViewController]; 
// You can remove a specific view controller with this. 

navigationController.viewControllers = allViewControllers;