【问题标题】:Initial View Controller on top level of hierarchy loses NavigationBar层次结构顶层的初始视图控制器丢失 NavigationBar
【发布时间】:2013-07-13 18:32:58
【问题描述】:

我有一个嵌入在导航控制器中的 3 个 TableViewController 的层次结构,我需要在层次结构顶部的最详细级别上启动。如果我将情节提要中的“是初始视图控制器”更改为最后一个详细的 TableViewController,我的应用程序将使用选定的 TVC 启动,但没有 NavigationBar。如何在所需的层次结构上启动并保持导航控制器管理视图堆栈?

谢谢。

【问题讨论】:

    标签: ios uinavigationcontroller storyboard hierarchy


    【解决方案1】:

    您正在告诉情节提要,您的第三个视图控制器是根视图控制器——它没有导航栏。如果您希望导航控制器作为根视图控制器出现,那么您需要将其设为初始视图控制器,然后将导航的根更改为您的第三个视图控制器。

    例如:

    initial-->[navigation controller]-->[third VC]   [first VC]-->[second VC] (keep these around if you want... just disconnect them from the navigation controller)
    

    【讨论】:

    • 我在情节提要中进行了更改,在启动时使用导航栏获得了第三个 VC,但是即使我将第一个和第二个 VC 连接到第三个,也无法到达另一个层次结构一。我想如果需要的话,我将不得不手动(在代码中)从第三个到第二个等,并传递上下文?
    • 我不太清楚你想要什么。您是否期望应用程序启动时 VC 的 1、2 和 3 已经在导航堆栈上?或者您是否希望 3 位于导航堆栈的根部,然后通过某种方式从 3 变为 1(然后是 2)?
    • 如下所述,我想在 Day 级别(第 3 级)开始查看,并有可能使用 leftBarButtonItem(后退按钮)返回到月和年级别,这是第 2 和第 1等级。如果您认为可以完成,我将在代码中进行 segues。谢谢。
    • 是的,您需要回到原来的情节提要并让导航控制器成为初始视图。然后,当调用导航控制器的 viewDidLoad 时,您必须执行两次手动 segues 才能推送其他两个 VC。虽然这是一个奇怪的用例,所以你可能需要重新考虑它是否是最好的设计。
    • 它看起来是一个优雅的解决方案。你的意思是我应该从各个 VC 的 viewDidLoad 中调用 segue,或者子类 Navigation Controller 并从它的 viewDidLoad 中调用它 2 次?当我从单个 VC 调用 segue 时,事情确实有效,但是当我进入层次结构的根并再次向下时,再次调用第二个 VC viewDidLoad 并且我登录控制台'嵌套推送动画可能导致导航栏损坏' 然后我的视图就脱离了导航栏。当我尝试继承 Navigation Contr. 时,它的 viewDidLoad 无法识别我的 segues。
    【解决方案2】:

    您必须选择您想要作为初始视图的 ViewController 并将其嵌入到 NavigationController 中,然后使用 push segues 添加所有其他视图。

    但是为什么要这样做呢?为什么不让第一个视图控制器显示您将在第三个视图控制器中拥有的数据?你最终会得到相同的结果。

    您还应该查看this

    【讨论】:

    • 原因是为了保留层次结构的上下文。想想第 1、第 2 和第 3 级,例如年、月和日。我想在当天开始查看,并有可能回到适当的月份。
    • @MartinKoles 通过阅读下面答案中的 cmets,您可以做的就是在您的第一个屏幕上创建一个自定义按钮(如果您愿意,您可以将其命名为“返回”),这将使您继续下一个视图。在日视图之后创建月视图和年视图(按此顺序),并使用 push segues 移动。
    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多