为什么使用setViewController从UINavigationController的导航栏中删除所有内容?

这是问题。 我在UINavigationController使用下面的代码来交换rootViewController 。 我需要能够在多个不同的屏幕之间交换rootViewController ,并允许用户从每个屏幕下钻(这显然是为什么我需要Nav控制器):

 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 ,我的导航栏中的一切消失。 我将补充说我有一个左右button以及一个自定义标题button,它们都被初始化,并被添加到init方法的导航栏中,一直工作正常,直到它们消失在我身上。

任何帮助将不胜感激。

因为UINavigationControllerpipe理视图控制器的堆栈(数组),所以如果你要提供一个堆栈,它将释放并移除它的旧堆栈。 如果你需要添加多个视图控制器,你可以使用-pushViewController:animated:completion:对于除最后一个视图控制器之外的所有视图控制器,animation设置为NO。

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