UITabBarController 与我的 splashsceen 并行运行

Posted

技术标签:

【中文标题】UITabBarController 与我的 splashsceen 并行运行【英文标题】:UITabBarController is running parallel with my splashsceen 【发布时间】:2016-04-05 21:15:24 【问题描述】:

我有一个 UITabBarController 容器 4 个视图控制器和另外两个视图控制器,分别为 SplashScreenVCLoginScreenVC,因为我已将 UINavigationViewController 设置为根视图控制器并在我的故事板中的导航控制器的帮助下启动启动画面但是当我实际运行应用程序时 tabBarController 和启动屏幕都同时运行。我想在启动屏幕和提交登录详细信息后加载要加载的选项卡栏的所有视图。 这是我设置根视图控制器的代码。

    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

HomeViewController *homeVC = [[HomeViewController alloc]init];
homeVC.title = @"Home";

NotificationViewController *notificationVC = [[NotificationViewController alloc]init];
notificationVC.title = @"Notifications";

ProfileViewController *profileVC = [[ProfileViewController alloc]init];
profileVC.title = @"Profile";

SelfiesCollectionViewController *selfiesCollectionVC = [[SelfiesCollectionViewController alloc]init];
selfiesCollectionVC.title = @"Selfie Collection";

homeVC = [storyBoard instantiateViewControllerWithIdentifier:@"HomeViewController"];

profileVC = [storyBoard instantiateViewControllerWithIdentifier:@"ProfileViewController"];

notificationVC = [storyBoard instantiateViewControllerWithIdentifier:@"NotificationViewController"];

selfiesCollectionVC = [storyBoard instantiateViewControllerWithIdentifier:@"SelfiesCollectionViewController"];



self.tabBarController = [[UITabBarController alloc]init];
self.tabBarController = [storyBoard instantiateViewControllerWithIdentifier:@"UITabBarController"];
self.tabBarController.viewControllers = @[homeVC,notificationVC,profileVC,selfiesCollectionVC];


UINavigationController *navigationVC = [[UINavigationController alloc]init];
navigationVC = [storyBoard instantiateViewControllerWithIdentifier:@"UINavigationController"];


[self.window setRootViewController:navigationVC];

【问题讨论】:

【参考方案1】:

你需要做以下事情。

1)如果您在 Xcode 7 及更高版本中工作,您有特殊的启动画面故事板。您可以在该故事板中设置您的图像。

您究竟需要什么标签栏控制器或导航控制器?

根据我的假设,登录控制器需要导航控制器。如果我的假设是正确的,那么您必须按照以下方式创建导航控制器的对象

UINavigationController *navigationVC = [[UINavigationController alloc]initWithRootViewController:LoginScreenVC];

现在您必须在 tabBarController 的 viewControllers 数组中添加这个 navigationVc。而不是将navigationVc设置为窗口的根控制器,您可以将标签栏设置为根控制器

[self.window setRootViewController:self.tabBarController];

建议:如果您使用情节提要,则不必编写所有这些行。您可以使用 segue 在情节提要文件中轻松完成。

【讨论】:

坐下还是有问题.. 根据您的解决方案,我的 loginVC 没有成为标签栏的一部分。并且标签栏的其他视图控制器仍然一起运行。我想先显示登录屏幕,然后在确认后检查用户名和密码,然后我想运行我的标签栏并查看标签栏内的控制器。但我的问题仍然存在。【参考方案2】:

您不应该在allocinit 之前或需要您的tabBarController。 在您中,您需要创建一个如下所示的公共方法。 从application launchWithOption方法中去掉tabBarController的分配和启动

-(void)userDidLoggedIn
     self.tabBarController = [[UITabBarController alloc]init];
self.tabBarController = [storyBoard instantiateViewControllerWithIdentifier:@"UITabBarController"];
self.tabBarController.viewControllers = @[homeVC,notificationVC,profileVC,selfiesCollectionVC];
[self.window setRootViewController:self.tabBarController];


现在只需像这样在登录按钮成功时调用此方法..

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate userDidLoggedIn];

【讨论】:

以上是关于UITabBarController 与我的 splashsceen 并行运行的主要内容,如果未能解决你的问题,请参考以下文章

在带有分段控件的 UITabBarController 中模态显示导航视图控制器

过渡到 UITabBarController

为啥当我使用 presentModelViewController 时未在我的 UITabBArController 中调用 viewWillAppear?

iPhone X 上的 UITabBarController

UINavigationController到UITabBarController

从 UITabBarController 中解散