【问题标题】:ios: How open Tab Bar controller from ViewController using StoryBoardsios:如何使用 StoryBoards 从 ViewController 打开标签栏控制器
【发布时间】:2014-03-03 14:57:34
【问题描述】:

我正在这样做,如果是第一次并且已经登录,那么我想从登录页面打开标签栏控制器,然后通过 LoginPage 并在 Spalsh 之后打开标签栏控制器

表示如果用户第一次登陆应用程序,时间序列应该是这样的 1. 飞溅 2.登录页面 3. 成功登录后打开有 4 个标签的标签栏控制器

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

我正在尝试通过 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; 它什么也不做,并且像这样停留在启动画面上

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

请建议我如何从视图控制器打开标签栏

【问题讨论】:

  • 标识符为“TripMapViewer”的VC是UITabBarController的子类吗?
  • 不,它继承自 ViewController
  • TripMapViewer 是 PIC 中的蓝色,继承自 ViewController

标签: ios iphone objective-c ipad xcode5


【解决方案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;
  }

如果您决定必须有一个用于启动画面的视图控制器,那么您可以将相同的代码放在那里。

【讨论】:

  • 感谢回答,那么如何从注册/登录控制器打开TabBarcontroller?
  • UIStoryboard *storyboard = self.storyboard;UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"mainViewController"];[self presentViewController:mainViewController animated:YES completion:nil];
  • 您是否在故事板中命名了视图控制器?您是否使用了正确的故事板名称?
【解决方案2】:

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

至少要到达你想去的地方的第一步是在故事板中添加一个标识到选项卡栏控制器(TripMapViewer 是其中一个选项卡)。然后实例化它,崩溃应该消失了。

在设计层面,请see my question and answer here关于如何进行登录和启动。

【讨论】:

    【解决方案3】:

    似乎 TripMapViewer 是某些 Tab 的 Storyboard ID 而不是 UITabBarController ,请确定它会起作用

    在下面的代码中 MainTabBarStoryboard IDUITabBarController 并且它工作得很好

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2018-02-24
      • 1970-01-01
      • 2017-10-13
      相关资源
      最近更新 更多