问题将多个视图控制器推送到导航控制器堆栈

时间:2010-04-11 23:37:25

标签: iphone

我正在尝试将三个视图控制器推到导航控制器上。

  [self.navigationController pushViewController:one animated:YES];
  [self.navigationController pushViewController:two animated:YES];
  [self.navigationController pushViewController:three animated:YES];

所需的行为是视图三将显示,当按下后退按钮时,它将转到查看两个,然后查看一个...

实际发生的是视图一是可见的,然后按回去查看两个,然后再返回查看一个。也就是说,显示视图一而不是视图三。

非常奇怪的是,在上面的调用显示正确的条目后查看navigationController的viewController数组,并查看visibleViewController属性显示它有三个视图...即使查看一个是可见的

如果我从可见视图导航到子视图(在视图中显示三个)并从该子视图中按回...它将进入查看三个。

看起来它正在显示一个视图,但知道它在视图三...

我完全糊涂了......任何想法?

吉姆

2 个答案:

答案 0 :(得分:35)

对于前两次推送,不要将动画标志传递为YES,将其设置为NO:

[self.navigationController pushViewController:one animated: NO]; 
[self.navigationController pushViewController:two animated: NO];
[self.navigationController pushViewController:three animated: YES];

这将为您提供所需的效果。否则,你会混淆动画系统,因为它试图将三个视图动画到同一个空间。

答案 1 :(得分:14)

当前最受欢迎的答案的问题是,在第三个变为可见之前,一秒钟和两个将在一瞬间可见。这不是一个大问题,但它不会给用户留下好印象。您正在寻找的解决方案:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:one];
[controllers addObject:two];
[controllers addObject:three];
[self.navigationController setViewControllers:controllers animated:YES];

这将动画三个,在此过程中没有一个或两个变得可见。