使用以编程方式创建的视图控制器展开segues

时间:2018-06-14 18:34:20

标签: ios swift programmatically-created unwind-segue childviewcontroller

我有一个视图控制器(PhotoViewController),它有一个子视图控制器(CameraViewController)。在CameraViewController中,有一个按钮可以通过其他以编程方式创建的视图控制器来引发一连串的segue。在最后一个视图控制器上,我想要展开原始的PhotoViewController。我发现的所有示例都要求您在故事板中拥有视图控制器,而我没有。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

如果你的原始PhotoViewController是在故事板上创建的,并且你想从程序化制作的VC中转回它,那么你已经呈现它而不是展开,因为unwindSegues仅用于故事板。

在此处展示您的PhotoViewController是其中一种方法。

func presentPhotoViewController() {
let storyboard = UIStoryboard(name: "YourStoryBoardName", bundle: nil)
if let photoViewController =  storyboard.instantiateViewController(withIdentifier: "PhotoViewControllerUniqueId") as? PhotoViewController {
    // Pass any data you have (Optional)
    self.present(photoViewController, animated: true, completion: nil)

    // If your PhotoViewController is embeded in a navigation Controller do the following.
     //let navController = UINavigationController(rootViewController: photoViewController)
     //self.present(navController, animated: true, completion: nil)
}

}

答案 1 :(得分:0)

你还没有理解unwind segue 是什么。它只是一种反转创建当前视图控制器的调用并将其放入视图控制器层次结构的方法,在特殊情况下,您希望通过故事板中的segue触发它。

  • 例如,如果您(或故事板)调用pushViewController(对于推送的视图控制器),则展开segue只是一种调用popViewController的方式。

    < / LI>
  • 或者,如果您调用(或故事板)调用present(对于模态呈现的视图控制器),则展开segue只是调用dismiss的一种方式。

如果你 在故事板中没有你的视图控制器,你就不会需要一个展开segue;你只需要在代码中直接做这两件事之一。

请记住,我们都相处,没有放松细分。事实上,我们都相处多年没有故事板!你也可以。