2011-09-22 38 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; 
相关问题