如何使用替换的UINavigationController推送UIViewController

时间:2012-04-05 12:44:41

标签: iphone ios uiviewcontroller uinavigationcontroller uinavigationbar

我有一个自定义UINavigationController,可以绘制自定义背景。在根视图控制器上访问self.navigationController时,已设置该导航控制器。现在我要做的是推动一个新的视图控制器,但将新视图控制器中的导航控制器替换为默认控制器(没有自定义背景)。

基本上,新的视图控制器呈现的图像导航栏是半透明的。因为它从根视图控制器重用导航控制器(带有自定义背景),所以最终效果是具有自定义背景的半透明导航栏。

我知道在将新视图控制器呈现为模态视图时,我可以替换导航栏。但是在推动新的视图控制器时可以替换它吗?

我试过这样的事情,但这段代码没有效果:

LTImageViewController* controller = [[LTImageViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self];
[navController pushViewController:controller animated:YES];

3 个答案:

答案 0 :(得分:2)

您不能只将视图控制器推到任何旧的导航控制器堆栈上。 (嗯,你可以,但你不会走得太远。)导航控制器应该是应用程序窗口的根视图控制器。如果要使用自定义导航控制器,则应将现有导航控制器替换为自定义版本。你会做类似的事情:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
delegate.window.rootViewController = [[MyCustomNavController alloc] init];

答案 1 :(得分:1)

在UINavigationController中推送视图控制器时,它会创建一个堆栈,我认为我们无法在另一个中推送导航控制器。

你可以做一件事以模态方式显示你的viewController并将TransitionStyle更改为UIModalTransitionStyleCoverVertical

可能会帮助

答案 2 :(得分:0)

如果您的问题只是导航栏的样式/颜色/图像,请在视图控制器的viewWillAppear:中设置:

 [self.navigationController.navigationBar setBackgroundImage:yourImage                             
                                               forBarMetrics:UIBarMetricsDefault];