如何正确设置 UINavigationController 并将视图添加到堆栈

Posted

技术标签:

【中文标题】如何正确设置 UINavigationController 并将视图添加到堆栈【英文标题】:How to properly set up UINavigationController and add views to the stack 【发布时间】:2013-12-07 08:48:49 【问题描述】:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self. window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
UINavigationController *navVC = [UINavigationController new];
UIStoryboard *mStoryboard = [UIStoryboard storyboardWithName:@"your storyboard name" bundle:nil];

ViewController *VC1 = [mStoryboard instantiateViewControllerWithIdentifier:@"VC"];


[navVC setViewControllers:[NSArray arrayWithObject:VC1] animated:NO];
[self. window setRootViewController:navVC];

[self. window makeKeyAndVisible];

return YES;
  

现在这会创建一个导航控制器,但是当我尝试显示 secondViewController 时,它会为我显示该视图的正确导航栏,但我看到的是黑色背景而不是实际视图。将 secondViewController 添加为子视图是可行的,但是当我现在尝试显示第三个时,它会再次向我显示正确的导航栏,并为该视图设置标题,但我仍然看到 secondViewController 的视图。现在我的问题是如何将 viewController 添加到 navigationController 以便正确显示它们?我什至必须添加它们吗?我已经阅读了苹果类参考,但没有任何代码。

【问题讨论】:

【参考方案1】:

试试这个:

self. window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
UIStoryboard *mStoryboard = [UIStoryboard storyboardWithName:@"your storyboard name" bundle:nil];
ViewController *VC1 = [mStoryboard instantiateViewControllerWithIdentifier:@"VC"];
UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:VC1];
[self. window setRootViewController:navVC];
[self. window makeKeyAndVisible];
return YES;

现在在 VC1 中将下一个视图控制器推送到您的堆栈中

// EDIT:
UIStoryboard *mStoryboard = [UIStoryboard storyboardWithName:@"your storyboard name" bundle:nil];
ViewController *vC2 = [mStoryboard instantiateViewControllerWithIdentifier:@"VC2"];
[self.navigationController pushViewController:vC2 animated:YES];

【讨论】:

我已经这样做了,但是当它推动视图控制器时,它没有正确设置视图,导航栏是正确的,但视图不是 推送是第二步。您是否在您的 didFinishLaunchingWithOptions 中完全实现了我的代码示例?您是否为情节提要中的每个视图控制器设置了所有情节提要标识符并在代码中使用相同的标识符来实例化它们?你看到你的第一个 viewController 了吗? 我确实看到了我的 firstViewVontroller,但我的问题是我看不到我的第二个或第三个 你如何实例化你的以下 vcs?如果设置正确,您是否控制了标识符?请参阅我的答案中的编辑。 天哪,太明显了。谢谢您的帮助!现在一切正常:)

以上是关于如何正确设置 UINavigationController 并将视图添加到堆栈的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UINavigationController 隐藏 UINavigationBar?

如何制作 UIImagePickerController StatusBar lightContent 样式?

如何正确设置监听器?

如何正确设置 UICollectionViewCell 边距?

如何在 Observables 上设置正确的类型?

如何正确设置 MediaPlayer 音频流类型