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

之前:

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

ade.window.rootViewController = newController; 

…一切正常,直到现在。

明天:

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

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

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

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

  • 我恢复我的导航控制器

  • 现在我在品牌,但我不希望我的用户在这里,我想向他们展示他们最后的颜色(我保存在偏好)

  • 我怎样才能模拟一个已知的品牌和模型的select?

非常感谢。

applicationDidFinishLoading程序委托中的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]; } 

所以对你来说,它会去:

Brand作为根视图控制器的应用程序委托中设置导航控制器用户select他们的品牌,然后pushViewController:animated: Model视图控制器。 然后用户select他们的模型,然后pushViewController:animated: Color视图控制器。 同样,用户select一种颜色,然后按下Pippo视图控制器。 现在,如果用户按下(或者您调用popViewControllerAnimated: ,它将返回到Color视图控制器,处于与用户将其交给Pippo控制器时相同的状态。

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