如何在不使用委托的情况下获取触发segue的视图控制器。并且没有在prepareForSegue中设置它。两个视图控制器都将嵌入其导航控制器中。
我想从显示的视图控制器中获取该视图控制器。我知道这不是iOS方式,因为iOS方式是使用委托。
但我很感激如何获得参考。
答案 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
是一个整数,用于定义要返回的堆栈的距离。