ios:如何从ViewController使用StoryBoards打开标签栏控制器

我这样做,并希望打开标签栏控制器从login页面,如果它是第一次,如果已经login然后通过login页面并打开标签栏控制器后Spalsh

意味着如果用户登陆应用第一时间sequesnce应该是这样的1. Splash 2.login页面3.在成功的login打开标签栏控制器有4个标签

如果用户已经login,然后1.飞溅2.标签栏控制器

在这里输入图像说明

我试图通过ViewDidLoad方法中的以下代码打开Tab Bar控制器

UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"]; tbc.selectedIndex=0; [self presentViewController:tbc animated:YES completion:nil]; 

但它给错误

ProjNew [1065:907] – [TripMapViewer setSelectedIndex:]:无法识别的select器发送到实例0x1d5600b0 2014-02-06 19:55:43.849

如果我删除tbc.selectedIndex = 0; 它什么都不做,并保持在这样的Splash屏幕上

 UITabBarController *lbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"]; [self presentViewController:lbc animated:YES completion:nil]; 

请build议如何从View Controller中打开标签栏

看来TripMapViewer是一些Tab的Storyboard ID ,而不是UITabBarController ,请确认它并且可以正常工作

如下面的代码MainTabBarUITabBarController Storyboard ID ,它完美的工作

 UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTabBar"]; tbc.selectedIndex=0; [self presentViewController:tbc animated:YES completion:nil]; 

你不需要一个闪屏控制器,除非你正在animation的东西。 这个例子使用NSUserDefaults来记住它是否是第一次login。

在你的应用程序委托放置以下内容:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; if(![[NSUserDefaults standardUserDefaults] dictionaryForKey:@"someKey"]){ UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"registerViewController"]; self.window.rootViewController = viewController; } else { UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"mainViewController"]; self.window.rootViewController = viewController; } [self.window makeKeyAndVisible]; return YES; } 

如果你决定你必须有一个视图控制器的启animation面,那么你可以把相同的代码在那里。

被实例化的VC不是一个TabBarController解释崩溃的事实。 代码为常规vc提供故事板,将其转换为UITabBarController ,然后向其发送一条消息setSelectedIndex :它不会实现,因为它不是一个标签栏控制器。

至less获得想要的位置的第一步是在故事板中将标识添加到标签栏控制器(TripMapViewer是其中一个标签)。 然后实例化,崩溃应该消失。

在devise层面,请在这里查看我的问题和答案,了解如何进行login和启动。