2009-09-14 39 views
2

我有3个视图(xib'd)第三个视图打开一个模态视图(也是xib'd)。 我的目标是处理模态视图并跳转到视图#1。如何跳转到特定视图?

我用下面的代码,但它什么也没做。

self.statusView = [[StatusViewController alloc] initWithNibName:@"StatusViewController" bundle:nil]; 
[self.navigationController popToViewController:self.statusView animated:YES]; 
[self.navigationController popToViewController: 

我也试过以下,结果相同。 [self.navigationController.viewControllers objectAtIndex:0] animated:YES];

我要疯了......

statusView有定期synthetized的访问,并表示我要跳到视图。

回答

1

-popToViewController让你弹出控制器关闭堆栈。你想要做的是到堆栈中新viewControllers,所以使用:

[self.navigationController pushViewController: self.statusView animated: YES];

7

这是不完全清楚你的看法如何对于建立彼此,根据您什么说到目前为止。

我猜你有一个导航控制器和3个视图控制器显示在导航堆栈上。

如果是这样,并且想要一次弹出两个屏幕(从#3到#1,跳过#2),那么您需要一个指向视图控制器的#1(不是查看本身)。它看起来好像您问题中的第一个popViewController:方法调用正在视图中发送。

示例代码,弹出的第一个视图控制器:

UINavigationController* navController = self.navigationController; 
UIViewController* controller = [navController.viewControllers objectAtIndex:0]; 
[navController popToViewController:controller animated:YES]; 

如果你已经尝试过这一点,这是行不通的,一些事情可能会错误:

  • 也许self.navigationController实际上并不是正确的对象。
  • 也许您所期望的视图实际上并不是在导航堆栈上查看#0。
  • 也许您正在使用的导航控制器当前不可见。

在这里您可以采取检验这些假设一些进一步的步骤:

  • 当你第一次分配,你要使用,请拨打NSLog(@"Nav controller is at %p", navController);在这个代码导航控制器添加到NSLog(@"Now my navController is at %p", navController);和呼叫检查地址是否匹配。
  • 如果导航控制器是正确的,则打印出当前的导航堆栈;这样的事情(假定每个视图控制器有一个不同的类名):

    for (UIViewController* viewController in navController.viewControllers) { 
        NSLog(@"%s", class_getName([viewController class])); 
    } 
    
  • 做一些视觉导航控制器,你认为是可见的,以确保它实际上是。例如[navController.visibleViewController.view addSubview:aColorFulView];其中aColorFulView是一些视觉上明显的UIView

+0

这实际上非常有帮助,请让我尝试跟进此事 - 即使我因为缺乏知识而无法了解发生了什么事情,但这很好。 – amok 2009-09-15 04:51:58

相关问题