以编程方式构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]; }