使用SwiftUI按钮从SwiftUI返回Storyboard

3
为了将SwiftUI视图和Storyboard合并,我创建了一个从Storyboard到SwiftUI视图的segue,但目前没有办法返回。
我不想通过导航栏来实现这一点,而是希望在我的SwiftUI视图中使用按钮来取消segue并返回到main.storyboard视图。

Storyboard View

我到目前为止实现结果的方法是使用SwiftUI视图作为托管控制器,然后从视图控制器添加了一个segue到子托管控制器。
我想要取消segue的按钮长这样:
Button(action: {
    print("button pressed") // UNWIND SEGUE HERE

  }) {
      Image("TopLeft")
      .renderingMode(.original)
      .resizable()
      .scaledToFit()
      .frame(width: 15, height: 15)
  }
}

这段代码与名为SecondView的类链接,它是SwiftUI的代码。 SecondView由一个名为ChildHostingController的子类激活,该子类与故事板上的UIHostingController链接:
class ChildHostingController: UIHostingController<SecondView> {

    required init?(coder: NSCoder) {
        super.init(coder: coder,rootView: SecondView());
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

有没有可能将Segue取消并返回到视图控制器?非常感谢!

是的,它会类似于这个设置。 - lorem ipsum
我不确定该如何处理这个问题,我无法理解你的示例代码,以便能够挑选出我需要的设置。 - gnielio
这里有另一个示例:https://dev59.com/HL3pa4cB1Zd3GeqPksPD#64404300 - lorem ipsum
非常抱歉,可能有点麻烦,但我并不完全理解。我想通过按钮来解开在一个UIViewController中使用的segue。因此,当点击该按钮(位于SwiftUI中)时,将返回到SwiftUI视图,并进入UIViewController。 - gnielio
你的按钮应该在UIKit控制器中调用一个取消segue。你可以在托管视图控制器中使用一个委托变量,指向呈现视图控制器。然后,托管视图控制器可以调用呈现视图控制器来取消。 - Ptit Xav
显示剩余2条评论
1个回答

2
一种可能的方法是通过视图模型从视图控制器向 SwiftUI 视图注入带有取消操作的闭包,并在 SwiftUI 视图按钮内调用它。
以下是主要部分:
super.init(coder: coder, rootView: SecondView(vm: viewModel))
viewModel.unwind = { [weak self] in
   // call unwind segue created in storyboard
    self?.performSegue(withIdentifier: "unwind_segue_identifier", sender: self)
}

您可以在此处查看完整的研究结果和代码


您真是让我惊叹不已,感谢您! - gnielio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接