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

Unwind segues with programmatically created view controllers

我有一个视图控制器 (PhotoViewController),它有一个子视图控制器 (CameraViewController)。在 CameraViewController 中,有一个按钮可以触发通过其他以编程方式创建的视图控制器的一系列连接。在这些视图控制器的最后一个上,我想放松到原来的 PhotoViewController。我发现的所有示例都要求您在情节提要中具有视图控制器,而我没有。我该怎么做?

如果您的原始 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)
}

}

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

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

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

如果您没有在故事板中使用视图控制器,则您不需要展开转场;您只需直接在代码中做这两件事中的一件。

请记住,我们相处 都很好,没有放松 segues。事实上,我们都在没有故事板的情况下相处了很多年!你也可以。