2010-04-11 107 views
16

我试图将三个视图控制器推到导航控制器上。将多个视图控制器推入导航控制器堆栈的问题

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

期望的行为是鉴于三会显示出来,当按下后退按钮就会去查看两个,然后查看一个...

而实际上,这种观点是一个可见并按回去查看两个,然后再回到查看一个。也就是说,视图一显示而不是视图三。

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

如果我从可见视图导航到一个子视图(显示在视图三的位置)并从该子视图向后按回...它将查看三个视图。

它看起来像它显示视图中的一个,但他知道这是在视图中的三个...

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

吉姆

回答

35

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

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

这会给你你想要的效果。否则,你会混淆动画系统,因为它试图将三个视图动画到同一个空间。

+1

杰出。谢谢Ben! jim – Jim 2010-04-12 10:42:13

+0

很好的答案,如果这是我的问题,我会接受这一个。使用XCode 5和iOS 7修复了这个问题。 – 2013-11-18 15:55:24

+0

谢谢你,太糟糕了OP从未接受过它,因为它是正确的答案。不知道如果mods可以做到这一点? – 2013-12-25 20:35:09

13

当前最有回报的答案的问题是,在第三个变得可见之前,第一个和第二个将在瞬间可见。不是一个大问题,但它不会给用户留下好印象。您正在寻找的解决方案:

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

这将在三个动画没有一两个成为可见的过程。

+0

这个答案提供了所需的效果,因为将动画标志设置为“否”的整个目的是我不想看到第一个和第二视图控制器。 – mrl 2015-06-18 03:37:19

+0

这实际上是正确的答案 – 2015-09-16 11:07:30

相关问题