Return 使用 SwiftUI 按钮从 SwiftUI 到 Storyboard
Return from SwiftUI to Storyboard with a SwiftUI button
为了合并 SwiftUI 视图和 Storyboard,我创建了一个从 Storyboard 到 SwiftUI 视图的 segue,但目前无法返回。
我不想通过导航栏来执行此操作,而是通过我的 SwiftUI 视图中的一个按钮将 segue 展开回 main.storyboard 视图。
到目前为止,我实现结果的方法是使用 SwiftUI 视图作为托管控制器,然后添加一个从视图控制器到子托管控制器的 segue。
我想解除 segue 的按钮如下所示:
Button(action: {
print("button pressed") // UNWIND SEGUE HERE
}) {
Image("TopLeft")
.renderingMode(.original)
.resizable()
.scaledToFit()
.frame(width: 15, height: 15)
}
}
此代码链接到名为 SecondView
的 class,这是 SwiftUI 代码。 SecondView 由子class ChildHostingController 激活,链接到故事板上的 UIHostingController:
class ChildHostingController: UIHostingController<SecondView> {
required init?(coder: NSCoder) {
super.init(coder: coder,rootView: SecondView());
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
是否有任何可能的方法将 segue 解回 View Controller?
非常感谢!!
一种可能的方法是通过视图模型从视图控制器将带有展开操作的闭包注入到 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)
}
为了合并 SwiftUI 视图和 Storyboard,我创建了一个从 Storyboard 到 SwiftUI 视图的 segue,但目前无法返回。
我不想通过导航栏来执行此操作,而是通过我的 SwiftUI 视图中的一个按钮将 segue 展开回 main.storyboard 视图。
到目前为止,我实现结果的方法是使用 SwiftUI 视图作为托管控制器,然后添加一个从视图控制器到子托管控制器的 segue。
我想解除 segue 的按钮如下所示:
Button(action: {
print("button pressed") // UNWIND SEGUE HERE
}) {
Image("TopLeft")
.renderingMode(.original)
.resizable()
.scaledToFit()
.frame(width: 15, height: 15)
}
}
此代码链接到名为 SecondView
的 class,这是 SwiftUI 代码。 SecondView 由子class ChildHostingController 激活,链接到故事板上的 UIHostingController:
class ChildHostingController: UIHostingController<SecondView> {
required init?(coder: NSCoder) {
super.init(coder: coder,rootView: SecondView());
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
是否有任何可能的方法将 segue 解回 View Controller?
非常感谢!!
一种可能的方法是通过视图模型从视图控制器将带有展开操作的闭包注入到 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)
}