在 TabbarController 中呈现 NavigationalViewController

Posted

技术标签:

【中文标题】在 TabbarController 中呈现 NavigationalViewController【英文标题】:Presenting NavigationalViewController in TabbarController 【发布时间】:2016-10-12 17:22:26 【问题描述】:

我正在开发一个 ios 应用程序,其结构是基于标签栏的。我的根视图控制器是 TabBarController 但如果第一次启动应用程序,我需要在应用程序的开头显示一个导航视图控制器。我实现了一个 FlowViewController 来控制应用程序的流程。在 FlowViewController 中,我创建 TabBarController 并将其分配为 rootviewcontroller。

如何在应用程序的开头显示导航视图控制器,然后显示 TabBarController。

流视图控制器

TabBarViewController *rootVC = [[TabBarViewController alloc] init];
rootVC.delegate = self;
rootVC.tabBar.translucent = NO;
self.rootViewController = rootVC;

在 AppDelegate 中,didFinishLaunchingWithOptions

self.flowController = [[FlowController alloc] init];

self.window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = self.flowController.rootViewController;

[self.window makeKeyAndVisible];

【问题讨论】:

【参考方案1】:

如果应用程序通常需要设置屏幕,我将使用 NSUserDefaults 检查该应用程序之前是否已在 viewDidLoad() 中启动。如果没有,那么我将展示设置 viewController。用户完成设置过程后,将某些内容添加到 NSUserDefaults 中,以便在启动应用程序时知道用户已经完成了该过程。

【讨论】:

【参考方案2】:

在我的应用程序中,我将 UINavigationController 设置为根视图控制器。然后我将 TabBarController 添加为 UINavigationController 的子项。

根据需要在 StoryBoard 中设计视图控制器。为 UITabBarController 设置 Storyboard id 并使用该 Storyboard 标识符调用标签栏控制器。

-(IBAction)LoginAction:(id)sender

UITabBarController *loadTabBar = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarViewControllerID"];
[self.navigationController pushViewController:loadTabBar animated:YES];

【讨论】:

以上是关于在 TabbarController 中呈现 NavigationalViewController的主要内容,如果未能解决你的问题,请参考以下文章

使用 TabBarController 呈现 ViewController

presentViewController over TabBarController 导致“尝试在其视图不在窗口层次结构中的 TabBarVC 上呈现 *VC”

如何通过 TabBarController => NavbarController 从 Appdelegate 呈现视图控制器

IBAction 使 TabBarController 应用程序崩溃

TabBarController 是不是有像 prepareForSegue 这样的拦截点?

如何在复杂的视图层次结构中呈现相机