我正在尝试将三个视图控制器推到导航控制器上。
[self.navigationController pushViewController:one animated:YES];
[self.navigationController pushViewController:two animated:YES];
[self.navigationController pushViewController:three animated:YES];
所需的行为是视图三将显示,当按下后退按钮时,它将转到查看两个,然后查看一个...
实际发生的是视图一是可见的,然后按回去查看两个,然后再返回查看一个。也就是说,显示视图一而不是视图三。
非常奇怪的是,在上面的调用显示正确的条目后查看navigationController的viewController数组,并查看visibleViewController
属性显示它有三个视图...即使查看一个是可见的
如果我从可见视图导航到子视图(在视图中显示三个)并从该子视图中按回...它将进入查看三个。
看起来它正在显示一个视图,但知道它在视图三...
我完全糊涂了......任何想法?
吉姆
答案 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];
这将动画三个,在此过程中没有一个或两个变得可见。