返回UINavigationController的第一个索引?

kar*_*e23 2 iphone sdk uinavigationcontroller ios

我正在做一个使用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];
Run Code Online (Sandbox Code Playgroud)

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

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

对不起,如果我没有解释清楚.

Dan*_*Ray 8

你问了两个问题.

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

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

正是如此:

NSMutableArray *controllers = self.navigationController.viewControllers;
[controllers removeObjectAtIndex:[controllers count] - 1]; //or whatever
[self.navigationController setViewControllers:controllers animated:YES];
Run Code Online (Sandbox Code Playgroud)


aVi*_*aSh 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用它,您可以返回任何指定的viewController.