为什么我的UINavigationController从第二个视图控制器开始?

时间:2014-10-22 13:25:25

标签: ios objective-c

这就是我所拥有的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  //create two vc's.....
  APCMainViewController *mainViewController = [[APCMainViewController alloc] init];
  APCVideosTableViewController *videosViewController = [[APCVideosTableViewController alloc] init];

  //create the main nav controller....
  UINavigationController *mainNav = [[UINavigationController alloc] initWithRootViewController:mainViewController];
  mainNav.viewControllers = @[mainViewController, videosViewController];

  self.window.rootViewController = mainNav;

  ...
}

但应用程序始终以videosViewController显示开始,而不是mainViewController。为什么呢?

2 个答案:

答案 0 :(得分:2)

尝试删除以下代码行

mainNav.viewControllers = @[mainViewController, videosViewController]; // Not required

您正在使用根视图控制器(mainViewController)初始化导航视图控制器,这是您要显示的第一个视图控制器。然后无需再次向堆栈添加视图控制器。

答案 1 :(得分:1)

来自文档

设置rootController时 根视图控制器位于数组中的索引0处,后视图控制器位于索引n-2处,顶部控制器位于索引n-1处,其中n是数组中的项目数。

为此属性分配新的视图控制器数组等效于调用setViewControllers:animated:方法,并将动画参数设置为NO。

所以这意味着,你正在调用setViewControllers;在文档中显示:

要放置在堆栈中的视图控制器。此阵列中控制器的前后顺序表示导航堆栈中控制器的新的从下到上的顺序。 因此,添加到数组的最后一项成为导航堆栈的顶部项目。

这应该可以为您提供导航堆栈倒置的原因。

所以它应该是

mainNav.viewControllers = @[videosViewController, mainViewController ];