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

3

现在:

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

ade.window.rootViewController = newController;

...一切都运行正常,直到现在。

明天:

我们需要添加一个基于NavigationController的部分到我们的App中,它将帮助用户浏览我们的:

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

因此,用户将选择一种颜色,然后点击一个按钮:现在我将切换到另一个UIViewController(称其为“pippo”),它实际上位于该导航层次结构之外(我无法通过几种方法将其推入nav-controller,我被迫这样做!)。

我想要的是从“pippo”返回到我的“Color”屏幕。因此,我正在寻找一种以编程方式“导航”恢复的导航控制器,我的意思是:

  • 我恢复我的导航控制器

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

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

非常感谢。

2个回答

11

在 App delegate 的 applicationDidFinishLoading 中:

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

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

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

现在,在你的根视图控制器类中(假设它被称为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];
}

所以对于您来说,应该这样做:

在应用程序委托中使用Brand作为根视图控制器设置导航控制器。 用户选择品牌后,您会pushViewController:animated: Model视图控制器。然后用户选择型号后,您会pushViewController:animated: Color视图控制器。同样地,用户选择一种颜色,然后您推送Pippo视图控制器。现在,如果用户按下返回按钮(或您调用popViewControllerAnimated:),它将返回到Color视图控制器,处于与用户离开它前往Pippo控制器时相同的状态。


对不起,有两个原因导致答案错误:我在帖子中引用了这句话:““pippo”实际上位于导航层次结构之外(我不能将其推入nav-controller进行多种方法,我被迫这样做!)。”所以你知道我不能也不想将'pippo'推入我的导航控制器。 - 另外,我想在没有用户交互的情况下导航控制器。:-\ - Fabio B.
我想不出任何情况下你不能将一个视图控制器推入导航栈。然而,你是老板。使用push和pop方法可以在没有用户交互的情况下导航堆栈。无论如何,帮不了你了,因为我已经不太明白了。 - Thomas Clayson
我的“pippo”是一个自定义的图像选择器,一个照相机。然而,我将尝试推送我的品牌和型号视图控制器,不使用动画,看看它会做什么。 - Fabio B.
1
好的,你可以通过在 pushViewController:animated: 周围使用 UIView 动画来添加自己的动画。 - Thomas Clayson

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];
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接