将故事板单一视图应用程序转换为具有多个相同视图的选项卡式视图

时间:2014-01-09 04:06:37

标签: ios iphone objective-c xcode

我使用Xcode 5中的故事板,几乎完善了我的第一个iOS应用程序作为单个视图。现在我想要包含一个带有相同视图的三个副本的标签栏。即将以完全相同的方式显示三个不同的数据集,可从选项卡中选择。

我正在努力进行这种转换。据我所知,我的所有模型和控制器代码都可以保持相同(除了获取每个模型的唯一数据)但是我是否修改了故事板或以编程方式进行了操作。

故事板方法似乎是错误的,因为每个视图都需要自己的定义,而它们应该共享相同的内容。代码方法更有意义,但我正在努力寻找所有部分以使其工作。在模拟器中启动时,我已经进行了几次操作,甚至无法显示标签视图。

我理解我现有的视图需要缩小才能适应,但我的自动布局正常工作,所以应该自己处理。

为了澄清,我从“单一视图”模板构建了应用程序,并且正在使用当前的故事板来启动和连接所有内容。

1 个答案:

答案 0 :(得分:0)

根据我上面留下的评论,这是我采用的解决方案。

  1. 通过拖动将现有视图控制器附加到标签栏控制器。
  2. 从标签控制器中删除所有默认添加的视图,只留下我的。
  3. 将标签控制器标记为初始视图。 (并且取消我原来的标记。)
  4. 更改我的原始视图控制器以应对标签栏占用的空间(在我的情况下,我不需要任何东西,所以我取消勾选“在底栏下”。)
  5. 在我的代码中,丢弃现有的单个附加视图,而不是建立三个
  6. 在app delegate的didFinishLaunchingWithOptions方法内...

    // Add extra tabs
    UIViewController *vc1, *vc2, *vc3;
    vc1 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"CBViewController"];
    [vc1 setTabBarItem:[[UITabBarItem alloc] initWithTitle:@"Tab A" image:[UIImage imageNamed:@"tabA_unselected"] selectedImage:[UIImage imageNamed:@"tabA_selected"]]];
    vc2 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"CBViewController"];
    [vc2 setTabBarItem:[[UITabBarItem alloc] initWithTitle:@"Tab B" image:[UIImage imageNamed:@"tabB_unselected"] selectedImage:[UIImage imageNamed:@"tabB_selected"]]];
    vc3 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"CBViewController"];
    [vc3 setTabBarItem:[[UITabBarItem alloc] initWithTitle:@"Tab C" image:[UIImage imageNamed:@"tabC_unselected"] selectedImage:[UIImage imageNamed:@"tabC_selected"]]];
    _tabController = (UITabBarController *)self.window.rootViewController;
    [_tabController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil] animated:YES];