如何将标签栏控制器集成到导航控制器工作流程中?

时间:2015-02-20 16:06:33

标签: ios uinavigationcontroller uitabbarcontroller

我获得了以下工作流程的设计:

  • 用户登录应用
  • 成功登录后,用户会看到包含数据行的表格视图
  • 单击数据行后,用户将被带到带有选项卡界面的视图控制器。选项卡式界面中的每个视图控制器 深入介绍了tableview中显示的数据的各个方面。
  • 用户可以从任何标签按下后退按钮并返回到桌面视图。

基于此描述,在我看来应用程序需要导航控制器根视图控制器用于登录和tableview,然后在点击表格行时,应用程序需要利用tabbar控制器来深入挖掘数据。

我似乎无法使用故事板将UITabBarController添加到导航控制器。此外,我发现其他SO帖子提出类似的问题,但提供的答案似乎都不是最新的,或使用当前(iOS7 / 8)最佳实践解决此工作流程。有没有办法完成这个工作流程?如果没有,是否有一个简明的解释我可以用来通知设计师和利益相关者?

9 个答案:

答案 0 :(得分:4)

我检查了你的要求。

虽然Apple Inc.不推荐常规用例,

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/TabBarControllers.html#//apple_ref/doc/uid/TP40011313-CH3-SW2

但通过以下步骤可以通过一些方法轻松实现建议的设计原则。

  1. 在故事板中创建类似的设计,注意导航控制器在登录屏幕之前。
  2. enter image description here

    1. 实现以下列表方法,以编程方式通过列表视图调用特定选项卡。
    2.  (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
          UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"test" forIndexPath:indexPath];
          cell.textLabel.text = [NSString stringWithFormat:@"%ld", (long)[indexPath row]];
          return cell;
      }
      
      (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
          UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTabbedViewController"];
          tbc.selectedIndex= (long)[indexPath row];
          [self showViewController:tbc sender:self];
      }
      
      1. 如果列表大小是动态的,您也可以以编程方式创建tabbar项目。
      2.   

        https://24hrstech.wordpress.com/2012/08/19/create-tabbarcontroller-programmatically/

答案 1 :(得分:4)

Apple建议UITabBarController主要用作根视图控制器。

在您的情况下,我建议在正常UISegmentedControl的视图上使用UIViewController而不是UITabBarController。使用某些逻辑,您可以在建议的UIViewController中显示与被按下的UISegmentedControl段相对应的不同视图。

此外,如果您使用的是导航控制器,则可以将UISegmentedControl嵌入导航栏中作为标题。 (请参阅电话应用程序中的“最近”标签。

答案 2 :(得分:3)

我为我正在使用的应用程序使用了类似的功能。在我的应用中, The screenshot of my view controllers

  1. 我登录并在导航控制器中注册,登录/注册成功后,它会转到另一个具有表格视图的导航控制器。

  2. 点击表格中的“旅游”单元格后,我将转到标签栏控制器,其中的标签包含有关4个不同位置的不同详细信息。在任何选项卡中,您都可以通过单击导航栏中的后退按钮返回成功登录后显示的主表视图。

    如果这是你需要的,我已经按照上面的答案中的'嵌入'标签栏控制器。它对我来说很完美。我的应用程序处于纵向模式。我听说这会在横向模式下造成问题。我是初学者,我在横向模式下也没有尝试过。

    在登录视图控制器之后为表视图嵌入新的导航控制器。我在我的应用程序中使用相同的。

答案 3 :(得分:3)

这是你需要做的。

这里我使用按钮进行导航,因为我没有使用完整描述创建视图,但不需要使用Table View Controller或tabbar绑定按钮。

1.。)选择View Controller,然后转到编辑> 嵌入> 导航控制器

enter image description here

2.。)使用表视图控制器绑定视图控制器。

enter image description here

3。)将识别设置为segue,以便您可以根据登录成功调用执行segue。

enter image description here

4.。)为了使用tabbar正确导航,您需要先将Tabbar控制器与View Controller绑定,然后将导航控制器嵌入到tabbar中。     类似地,您也可以将导航控制器嵌入到tabbar控制器中,但它不是正确的流程。

enter image description here

5.)最后,你的故事板看起来会像。

enter image description here

6。)结果

enter image description here

希望它有助于解决你的问题。

答案 4 :(得分:0)

在导航控制器中嵌入标签控制器并不是很困难,您可以通过将导航控制器设置为rootViewController来实现,然后创建一个从tableview单元格开始到tabBarController的segue,这里是{{3您的工作流程。

答案 5 :(得分:0)

你可以像这样设计你的用户界面

enter image description here

  • 将导航控制器设为初始视图控制器
  • 第二个视图适用于您的登录屏幕
  • 第三个视图是显示数据的表格视图
  • 最后是带有项目视图控制器的tabbar控制器

希望这会有所帮助......

答案 6 :(得分:0)

虽然可行,但建议不要在导航栏中嵌入标签栏。我反对Apple指南,用户习惯将标签栏作为根控制器。

我只想在某些情况下显示标签栏,我建议在导航控制器顶部以模态方式显示它。


来自Apple

  

在创建标签栏界面之前,您需要确定自己的意图   使用标签栏界面。因为它强加了一个总体   对您的数据进行组织,您应该只使用这些特定的数据   方法:

     
      
  • 直接将其安装为窗口的根视图控制器。
  •   
  • 安装为   拆分视图界面中的两个视图控制器之一。 (仅限iPad)
  •   
  • 从另一个视图控制器以模态方式显示它。
  •   
  • 从a显示   酥料饼。 (仅限iPad)
  •   
     

在应用的主页面中安装标签栏界面   窗口是目前使用它的最常用方式。   在这种情况下,   标签栏界面提供了基本的组织原则   对于您的应用程序的数据,每个选项卡将用户引导至不同的部分   该应用程序。您可以单独使用标签栏控制器   与其他视图控制器结合以创建更多   复杂的界面。有关更多信息,请参阅组合视图   控制器接口。

     

如果非常的话,也可以以模态方式显示标签栏控制器   具体需要使这样做有价值。例如,你可以   以模态方式呈现标签栏控制器以编辑某些复杂   具有多个不同选项集的数据集。因为一个模态   视图填充全部或大部分屏幕(取决于设备),   标签栏的存在只会反映可用的选择   查看或编辑模态显示的数据。避免使用标签栏   这样就可以使用更简单的设计方法。

答案 7 :(得分:0)

您不能将TabBarController从表格视图单元格中推送为" Push现在已被删除"。您可以在故事板中按照以下步骤操作:

  1. 选择导航控制器初始视图控制器。
  2. 将tableview添加为其根视图控制器。
  3. 然后将TabBarController添加到故事板。
  4. 然后右键单击tableView Cell并使用" Show"将tableview单元格选择链接到TabBarController。
  5. Image showing the workflow

答案 8 :(得分:0)

您可以使用MHCustomTabBarController使用Apples Custom Container ViewController API构建它,并且可以嵌套在导航控制器中