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

时间:2011-08-30 10:38:43

标签: iphone ios uiviewcontroller uinavigationcontroller navigation

在:

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

ade.window.rootViewController = newController;

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

明天:

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

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

因此,用户将选择一种颜色,然后单击一个按钮:现在我将切换到另一个UIViewController(称之为" pippo"),它实际上位于导航层次结构之外(我可以'把它推到导航控制器中的几种方法,我强行这样做!)。

我想要的是回到我的" Color"屏幕,来自" pippo"。所以,我正在寻找一种以编程方式导航的方法#34;导航"我恢复的导航控制器,我的意思是:

  • 我恢复导航控制器

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

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

非常感谢。

2 个答案:

答案 0 :(得分:11)

在App委托中的applicationDidFinishLoading

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

[window makeKeyAndVisible];
[window addSubview:navController.view];

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

现在,在你的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];
}

SecondViewController中,您可以使用以下方式浏览堆栈:

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

所以对你而言:

在app委托中设置导航控制器,Brand作为根视图控制器 用户选择他们的品牌并pushViewController:animated: Model视图控制器。然后,用户选择他们的模型并pushViewController:animated: Color视图控制器。同样,用户选择一种颜色,然后按下Pippo视图控制器。现在,如果用户按下(或您调用popViewControllerAnimated:),它将返回到Color视图控制器,其状态与用户离开时转到Pippo控制器的状态相同

答案 1 :(得分:0)

在AppDelegate.m类中编写以下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
   MainViewController *mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    self.nav = [[UINavigationController alloc] initWithRootViewController:mainViewController];
    self.nav.navigationBarHidden = YES;
    [mainViewController release];
   [_window addSubview:nav.view];
   [_window makeKeyAndVisible];
 }