返回UINavigationController的第一个索引?

时间:2011-09-22 14:16:18

标签: iphone ios sdk uinavigationcontroller

我正在做一个使用UINavigationController的应用程序,我正在切换到其他UIViewControllers,如下所示:

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];

我想这是在UINavigationController中创建一堆UIViewControllers,也许是一个索引数组?我想知道怎么回头而不必一个接一个地回来。

例如,我正在通过几个屏幕航行,并且我想在第一个导航索引处返回一个按钮。我还想知道如何修改索引,查看,擦除以及与此问题有关的任何内容。

很抱歉,如果我没有解释清楚。

6 个答案:

答案 0 :(得分:8)

你问了两个问题。

首先,我如何回到我的第一个视图控制器。正如@Thomas Clayson和@ender所回答的那样,你需要你的navigationcontroller对象的popToRootViewControllerAnimated:方法。

第二个是如何移动到视图控制器堆栈中的特定索引。答案是,您可以显式设置viewControllers数组。因此,您可以拉出视图控制器的当前列表,修改它,并将其设置回navigationController堆栈。它将重置堆栈并动画移动到堆栈中的顶部项目。

所以:

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

答案 1 :(得分: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 :(得分:4)

[self.navigationController popToRootViewControllerAnimated:YES];

将带您回到第一个视图控制器(根视图控制器)。

希望这有帮助

答案 3 :(得分:2)

使用此

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

答案 4 :(得分:1)

您应该使用popToRootViewControllerAnimated:来自UINavigationController class reference:

  

弹出除根视图外的堆栈上的所有视图控制器   控制器并更新显示。

答案 5 :(得分: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;