ios:如何使用StoryBoards从ViewController打开Tab Bar控制器

时间:2014-02-06 15:15:06

标签: ios iphone objective-c ipad xcode5

我这样做,想要从登录页面打开标签栏控制器,如果它已经第一次登录,然后通过登录页面并在Spalsh后打开标签栏控制器

意味着如果用户在应用程序第一时间登陆,则应该是这样的 飞溅 2.登录页面 3.成功登录后,打开带有4个选项卡的标签栏控制器

如果用户已经登录 飞溅 2.标签栏控制器

enter image description here

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

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

但是它给出了错误

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

如果我删除 tbc.selectedIndex = 0; 它什么都不做,就像这样停留在Splash屏幕上

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

请建议我如何从View Controller打开标签栏

3 个答案:

答案 0 :(得分:19)

似乎 TripMapViewer 是某个标签的Storyboard ID,而不是UITabBarController,请确保它可以正常工作

如下面的代码 MainTabBar Storyboard ID的{​​{1}}而且效果很好

UITabBarController

答案 1 :(得分:1)

除非您正在制作动画,否则您不需要启动画面控制器。此示例使用NSUserDefaults记住它是否首次登录。

在您的应用程序委托中添加以下内容:

 - (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;
  }

如果您决定必须为启动画面设置一个viewcontroller,那么您可以在那里添加相同的代码。

答案 2 :(得分:1)

实例化的VC不是TabBarController的事实解释了崩溃。该代码向故事板询问常规vc,将其转换为UITabBarController,然后向其发送消息setSelectedIndex:它没有实现,因为它不是标签栏控制器。

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

在设计层面,请see my question and answer here了解如何登录和启动。