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

时间:2017-01-08 22:45:23

标签: ios swift swift3

如何在不使用委托的情况下获取触发segue的视图控制器。并且没有在prepareForSegue中设置它。两个视图控制器都将嵌入其导航控制器中。

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

但我很感激如何获得参考。

2 个答案:

答案 0 :(得分:1)

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

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

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

    let presentingViewController = viewControllers[viewControllers.count - 2]
}

而且,对于模态视图控制器,您只需在UIViewController上使用 presentsViewController 属性即可。另请注意,presentViewController是可选的,这意味着如果此视图控制器不是显示它的viewcontroller的 presentsViewController ,那么 presentsViewController 将变为nil

答案 1 :(得分:0)

您可以从UIViewControllers

中检索整个UINavigationController堆栈
let viewControllers = self.navigationController.viewControllers

您可以从上一页和后面回读:

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

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