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

Jim*_*Jim 16 iphone

我试图将三个视图控制器推到导航控制器上.

  [self.navigationController pushViewController:one animated:YES];
  [self.navigationController pushViewController:two animated:YES];
  [self.navigationController pushViewController:three animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

吉姆

Ben*_*ieb 35

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

[self.navigationController pushViewController:one animated: NO]; 
[self.navigationController pushViewController:two animated: NO];
[self.navigationController pushViewController:three animated: YES];
Run Code Online (Sandbox Code Playgroud)

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


Kim*_*afr 14

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

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:one];
[controllers addObject:two];
[controllers addObject:three];
[self.navigationController setViewControllers:controllers animated:YES];
Run Code Online (Sandbox Code Playgroud)

这将在三个中生成动画,而在此过程中不会出现一个或两个.