如何从 popover 演示视图控制器导航到另一个视图控制器

How to navigate from popoverpresentation view controller to another view controller

我有一个带有导航控制器的屏幕,它在导航栏上有一个按钮,它显示 table(来自另一个视图控制器)到 select 使用弹出显示的东西,现在单击这些项目中的任何一个,我想在不同的屏幕上打开另一个视图控制器。

但是如果我使用 navigationController?.pushViewController(tab, animated: true) 新的视图控制器显示在那个小弹出视图本身

如果我使用 navigationController?.presentViewController(tab, animated: true) ,则该屏幕上没有导航栏,我无法返回到上一个屏幕。如何以我可以返回到首先显示弹出列表的屏幕的方式进行操作。

如果您使用的是情节提要,那真的很容易做到。如果不是,那么您应该。使用 Storyboard 非常好

让我们将您的视图控制器命名为这些名称:

  • 可以显示弹出窗口的视图控制器被称为SourceVC
  • 弹出控制器被调用PopoverVC
  • 当用户 select 从 table 视图调用某些内容时显示的视图控制器 NewVC

添加一个将您的 SourceVC 连接到您的 NewVC 的节目转场。给 segue 一个标识符。

添加从 PopoverVC 展开到 SourceVC 的展开转场。首先,将这些方法添加到 SourceVC:

func unwind(segue: UIStoryboardSegue) {
    if let vc = segue.sourceViewController as? PopoverVC {
        // get the thing that the user selected and store it somewhere
        // perform a segue that shows NewVC
    }
}

override func prepareForSegue(segue: UIStoryboardSegue) {
    if let vc = segue.destinationViewController as? NewVC {
        // pass the thing that the user selected to the NewVC
    }
}

然后,select PopoverVC 并控制拖动它到 SourceVC 中的 "Exit" 东西。和 select "unwind:"。也给这个 unwind segue 一个标识符。

当用户 select 在 table 视图中有一行时,只需执行展开转场并将用户 select 编辑的内容存储在 class-级别变量,以便您可以将其传递给 SourceVC.