【问题标题】:How to exit Navigation Controller?如何退出导航控制器?
【发布时间】:2024-01-16 16:36:01
【问题描述】:

我的餐厅故事板布局是这样的:

主视图控制器 > 导航控制器 > 表视图控制器 > 3 个单独的表视图

主视图控制器转到几个不同的视图控制器,所以我需要定期返回它。表视图控制器控制不同菜单的 3 个单独的表视图。在导航控制器中使用表视图控制器可以让后退按钮脱离 3 个单独的表视图,但我不知道如何将后退按钮从表视图控制器获取到主视图控制器。

到目前为止,我已经在故事板 GUI 中完成了这一切,所以如果可以在那里对修复进行排序,那对我来说是最容易理解的。

【问题讨论】:

    标签: ios xcode uinavigationcontroller uinavigationbar


    【解决方案1】:

    如果您不想将导航控制器放在主视图控制器之前,可以使用“展开转场”。

    创建一个 IBAction 方法以在您的主视图控制器中执行展开转场:

    PrimaryVC.h

    - (IBAction)unwound:(UIStoryboardSegue *)segue;
    

    PrimaryVC.m

    - (IBAction)unwound:(UIStoryboardSegue *)segue
    {
        // No need to do anything here...
    }
    

    在第一个 Table View Controller 中,将一个条形按钮项拖到导航项(条形)的左上方。一旦它在那里,按住控制键并从栏按钮向下拖动到场景底部,您将看到一个绿色的退出图标。 unwound: 方法应显示在列表中...选择该方法。

    现在您的按钮应该让您返回到主视图控制器。

    【讨论】:

      【解决方案2】:

      为什么不将导航控制器作为主视图控制器的一部分?然后,当您按下表视图控制器时,您会在其上获得一个后退按钮。所以它将是导航控制器 -> 主视图控制器 -> 表视图控制器 -> ...

      我在故事板中做到了这一点,导航控制器场景首先是,然后与根视图控制器的关系是主视图控制器

      【讨论】:

      • 嗯,可以,但是有问题。我需要在导航控制器中打开顶部栏才能在表视图控制器中获取导航栏,但我不想在具有自己的自定义布局的主视图控制器上看到它。在视图设置中关闭顶部栏并不会在该屏幕上隐藏它。
      • 我认为在这种情况下,如果你不想在那里看到它,你可以从主视图控制器调用 viewWilAppear 中的 [self.navigationController setNavigationBarHidden:YES animated:NO];