【问题标题】:Using Xcode Storyboard to create Master-Detail views where the Detail view is Tab Bar to three different views使用 Xcode Storyboard 创建 Master-Detail 视图,其中 Detail 视图是 Tab Bar 到三个不同的视图
【发布时间】:2013-09-03 21:47:26
【问题描述】:

我正在尝试实现主细节场景,其中细节场景可以通过标签显示三个不同的场景。该示例是一个故事列表,对于每个故事,我都有兴趣介绍介绍、作者信息和评论。所以场景如下:

  1. 主场景:故事列表

选择故事时:

  1. 细节 - 介绍场景(关于所选故事)
  2. 细节 - 作者场景(关于作者)
  3. 详细信息 - 评论场景(评论列表)

我附上了我用来实现这一目标的故事板: https://docs.google.com/file/d/0B6I7Mlt7gqCBVTFZR2lsX0Q4MUk/edit?usp=sharing

我还在 iPhone 模拟器上附加了结果场景,显示了 Detail - Author 场景: https://docs.google.com/file/d/0B6I7Mlt7gqCBQWhLTlNwWjZ2TG8/edit?pli=1

我的问题是细节中出现了 2 个导航栏 - 作者场景:顶部的导航栏带有故事后退按钮,底部的导航栏带有作者标签和 B 按钮。我希望它们被折叠成一个导航栏。这意味着当我从 Stories 场景中单击一个故事以转换到详细作者视图时,将只有一个导航栏具有 Stories 后退按钮、作者标签和 B 按钮。

我的问题是:如何将这两个导航栏折叠在一起?任何建议将不胜感激。

【问题讨论】:

  • 为什么在每个选项卡中都有导航控制器作为根控制器?您只显示嵌入在这些导航控制器中的一个控制器,因此无需拥有这些(除非您要推送到故事板中还没有的其他控制器)。
  • 你是对的,没有必要为每个细节视图控制器使用一个导航控制器。我想要实现的是以某种方式将“后退”按钮从主场景转移到细节场景。如果没有以编程方式向每个详细视图控制器添加一个后退按钮,这似乎不会发生——有点乏味。
  • 我把 Xcode 项目放在这里:drive.google.com/… 供您阅读。

标签: ios xcode storyboard uitabbarcontroller master-detail


【解决方案1】:

问题是你有一个根导航控制器,并且你在标签控制器的每个标签中也有一个导航控制器,然后你同时显示它们。

你可以尝试几件事:

  1. 在显示选项卡视图时隐藏根导航控制器导航栏。这可以是手动的,也可以是模态的。在任何一种情况下,您都需要一个完成/返回按钮来关闭。模态选项可以在情节提要中完成。

  2. 将委托添加到标签栏控制器。从每个选项卡中删除导航控制器。 When the tab changes, get the new view controller and set its navigationItem onto the root nav controllers nav bar.


后退按钮项仅在有要返回的内容时显示。您可以添加左键项目。您也许可以将它们连接到展开的 segue,或者您可能需要向每个视图控制器添加一个方法:

[self.tabBarController.navigationController popViewControllerAnimated:YES];

【讨论】:

  • 第一种使用 Modal segue 的方法奏效了。对于第二种方法,您能否展示如何将委托添加到选项卡栏控制器?谢谢。
  • 如果第一个选项适合您,请坚持下去。其次,需要一些东西作为委托,所以你需要一个子类/控制器来承担责任。那可能是主视图控制器,但不干净。
  • 同样,对于第一种方法,我无法将后退按钮添加到带有 Storeyboard 的 Detail - Author 场景的导航项中。这是否必须以编程方式完成?再次感谢。
  • 谢谢韦恩。显然,Modal segue 使后续的 Detail 场景完全独立,而 Push segue 让 Tab Bar Navigation 控制器能够返回(如果选择 Push 作为 segue,导航栏在 Tab Bar 控制器上可见) .我试图让 Storyboard 以声明方式进行。以编程方式添加,也许可以使 Master(Stories)场景中的 preperForSegue 方法根据过渡进入的第一个 Detail 场景向 Detail 场景添加不同的标题。话又说回来,标签之间的后续切换可能会很痛苦。
  • 我把 Xcode 项目放在这里:drive.google.com/… 供您阅读。
【解决方案2】:

我想出了一个解决方案:

目标:当使用从 Master 到标签栏场景的 Push segue 将 Master-Detail 方案与 Detail 部分通过标签栏控制器传播到多个场景时,我想要:1)。保留 push segue 中的后退按钮,2)。将选项卡栏场景上的导航项设置为可见的任何细节场景,3)。在细节场景上设置右键。另一个目标是只使用 Storyboard 来传达 GUI 设计和交互流程,而不需要进入代码。

问题:使用哪些控制器存在许多问题。 (并且可以玩我在这里上传的 Xocde 项目来查看它们。)一个很好的解决方案是为每个细节场景使用导航控制器,这使得条形按钮项目可以添加到细节场景上的导航栏(不要自己在细节场景中添加导航栏)。仅从情节提要中,这工作正常,除了导航场景中的导航栏将显示在标签栏场景的导航栏下方,并且上部导航栏上没有正确的标题或正确的按钮。

解决方案:原帖中描述的所有场景的基本使用都很好。对于程序化更改部分,为细节场景创建视图控制器 .h 和 .m。然后在 viewDidAppear 方法中,检索添加到细节场景导航栏右侧的栏按钮,然后将其分配给标签栏场景导航栏上的右侧栏按钮项。

sn-p的代码如下——这适用于我之前描述的场景:

    UIBarButtonItem *detailButton = self.navigationItem.rightBarButtonItem;
    self.parentViewController.parentViewController.navigationItem.rightBarButtonItem = detailButton;

在 Storyboard 画布上,选择导航场景,并确保其导航栏已关闭。

我特别喜欢的一点是,GUI 设计和流程完全分离。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多