5

这就是问题所在。我在 a 中使用以下代码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 方法中添加到导航栏,并且一直运行良好,直到它们消失在我身上。

任何帮助将不胜感激。

4

1 回答 1

9

因为 UINavigationController 管理视图控制器的堆栈(数组),所以如果您要为其提供堆栈,它将释放并删除它的旧堆栈。如果您需要添加多个视图控制器,您可以使用-pushViewController:animated:completion:除了最后一个视图控制器之外的所有设置为 NO 的动画。

因为你给它的堆栈只包含一个视图控制器,-count所以会打印 1,事实上,它就是顶视图控制器。

于 2012-11-13T14:10:09.887 回答