Ios 如何获取触发segue的视图控制器

Ios 如何获取触发segue的视图控制器,ios,swift,swift3,Ios,Swift,Swift3,如何在不使用委托的情况下获取触发segue的视图控制器。而且没有把它放在准备室里。两个视图控制器都将嵌入其导航控制器中 我想从显示的视图控制器中获取该视图控制器。我知道这不是iOS的方式,因为iOS的方式是使用委托 但是我很感激如何获取参考。您可以从UINavigationController检索整个UIViewControllers堆栈: let viewControllers = self.navigationController.viewControllers 您可以从上一页往回读: i

如何在不使用委托的情况下获取触发segue的视图控制器。而且没有把它放在准备室里。两个视图控制器都将嵌入其导航控制器中

我想从显示的视图控制器中获取该视图控制器。我知道这不是iOS的方式,因为iOS的方式是使用委托


但是我很感激如何获取参考。

您可以从
UINavigationController
检索整个
UIViewControllers
堆栈:

let viewControllers = self.navigationController.viewControllers
您可以从上一页往回读:

if let viewController = viewControllers[viewControllers.count - x] {
    // Do stuff
}

其中
x
是一个整数,用于定义要返回堆栈的距离

这里有两个你应该理解的主要概念。第一个是导航控制器,它将新的视图控制器推到ViewController堆栈的顶部,第二个是简单的模态视图控制器,它只显示一个新的视图控制器

如果正在使用导航控制器并将新的视图控制器推送到堆栈上,则可以使用以下方法获取推送它的视图控制器

if let viewControllers = navigationController?.viewControllers, viewControllers.count > 1 {

    let presentingViewController = viewControllers[viewControllers.count - 2]
}
而且,对于模态视图控制器,您只需在UIViewController上使用presentingViewController属性即可。还请注意,presentingViewController是可选的,这意味着如果此视图控制器不是显示它的viewcontroller的presentedViewController,则presentingViewController将变为零