以编程方式构建/导航导航控制器

Fab*_* B. 3 navigation iphone uiviewcontroller uinavigationcontroller ios

之前:

我的应用程序基于独立的视图控制器.我可以通过替换应用程序委托上的根视图控制器从一个切换到另一个:

ade.window.rootViewController = newController;
Run Code Online (Sandbox Code Playgroud)

......一切正常,直到现在.

明天:

我们必须添加一个基于NavigationController的App部分,这将帮助用户浏览我们的:

品牌=>型号名称=>颜色

因此,用户将选择一种颜色,然后单击一个按钮:现在我将切换到另一个UIViewController(称为"pippo"),它实际上位于导航层次结构之外(我无法将其推入导航控制器中方法,我被迫这样做!).

我想要的是从"pippo"回到我的"颜色"屏幕.所以,我正在寻找一种方法以编程方式"导航"我恢复的导航控制器,我的意思是:

  • 我恢复了我的导航控制器

  • 现在我在Brands上,但我不希望我的用户在这里,我想向他们展示他们最后的颜色(我将其保存在首选项中)

  • 如何模拟已知品牌和型号的选择?

非常感谢.

Tho*_*son 11

applicationDidFinishLoadingApp代理中:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

[window makeKeyAndVisible];
[window addSubview:navController.view];
Run Code Online (Sandbox Code Playgroud)

这将实例化导航控制器并将其作为视图添加到窗口.

现在,在你的rootViewController类中(假设它被调用FirstViewController)你可以这样做:

- (void)clickedAButton:(id)selector {
  SecondViewController *nextViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
  // and push it onto the 'navigation stack'
  [self.navigationController pushNavigationController:nextViewController animated:YES];
  // and release
  [nextViewController release];
}
Run Code Online (Sandbox Code Playgroud)

在您的使用中,SecondViewController您可以使用以下方式返回堆栈:

- (void)clickedAnotherButton:(id)selector {
  // goes back to the last view controller in the stack
  [self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

所以对你来说它会:

成立于应用程序的委托导航控制器Brand的根视图控制器用户选择自己的品牌和你pushViewController:animated:Model视图控制器.然后,用户选择他们的模型和你pushViewController:animated:Color视图控制器.类似地,用户选择颜色并按下Pippo视图控制器.现在,如果用户按下(或您调用popViewControllerAnimated:),它将返回到Color视图控制器,其状态与用户离开控制器时的状态相同Pippo.