3

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

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

ade.window.rootViewController = newController; 

...和所有的工作权,到现在为止。

明天:

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

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

所以,用户将选择一种颜色,然后单击一个按钮:现在我将切换到另一个实际位于该导航层次之外的UIViewController(称为“pippo”)(我无法将其推送到nav-controller中用于多种方法,我被迫这样做!)。

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

  • 我恢复我的导航控制器

  • 现在我对品牌,但我不我不想让我的用户在这里,我想向他们展示他们最后一个颜色(我把它保存在首选项中)

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

非常感谢。

回答

11

在应用程序委托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作为根视图控制器 用户选择他们的品牌和您pushViewController:animated:视图控制器Model。然后用户选择他们的模型和pushViewController:animated:Color视图控制器。类似地,用户选择一种颜色,然后按下视图控制器Pippo。现在,如果用户按下(或者您拨打popViewControllerAnimated:),它将返回到Color视图控制器,其状态与用户使其离开Pippo控制器时的状态相同。

+0

soorry,错误的答案,原因有二:我从我的文章引述如下:“”皮波“),这实际上驻留在导航层次以外(我可以”把它推到导航控制器中用于几种方法,我强迫这么做!)。“所以你知道我不能和我不想在我的导航控制器中推“pippo”。 - 另外,我想在没有用户交互的情况下导航控制器。 : - \ –

+0

我想不出一个单一的情况下,你不能推视图控制器到导航堆栈。但是,你是老板。使用push和pop方法可以在没有用户交互的情况下浏览堆栈。无论如何,无法帮助你,因为我不再了解。 –

+0

我的“皮波”是一个自定义imagepicker,照片相机。不过,我会尝试推动我的品牌和模型视图控制器没有动画,并看看它做什么。 –

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