这是问题所在。我在UINavigationController
中使用以下代码来交换rootViewController
。我需要能够在多个不同的屏幕之间交换rootViewController
并允许用户从每个屏幕向下钻取(这显然是我需要导航控制器的原因):
SomeViewController *tmp = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil];
NSArray * viewControllers = [self viewControllers];
NSArray * newViewControllers = [NSArray arrayWithObjects:tmp, nil];
[self setViewControllers:newViewControllers];
现在在阅读UINavigationController
的类引用时,我看到对于“viewControllers”属性,它说:“根视图控制器位于数组中的索引0处,后视图控制器位于索引n处-2,顶部控制器位于索引n-1,其中n是数组中的项目数。“
当我在那里打印一个viewControllers数组的计数时,我得到1,当前的rootViewController。如果顶级控制器(我假设是导航栏)没有东西吗?
只要我在新视图中使用setViewControllers
,导航栏中的所有内容都会消失。我将补充一点,我有一个左右按钮以及一个自定义标题按钮,它们都已初始化并添加到init方法的导航栏中,并且一直工作正常,直到它们消失在我身上。
非常感谢任何帮助。
答案 0 :(得分:5)
因为UINavigationController管理视图控制器的堆栈(数组),如果你要为它提供一个堆栈,它将解除分配并删除它的旧堆栈。如果您需要添加多个视图控制器,除了最后一个视图控制器之外,您可以将-pushViewController:animated:completion:
的动画集设置为NO。
因为你给它的堆栈只包含一个视图控制器,-count
会打印1,实际上它会是顶视图控制器。