【发布时间】:2020-06-03 23:48:34
【问题描述】:
到目前为止,我有一个完全使用 UIKit 构建的应用程序。但是,我希望能够开始实现一些 SwiftUI 视图来替换一些 UIViewControllers。
我已经能够通过点击按钮从 UIViewController 导航到 SwiftUI 视图:
@IBAction func buttonTapped(_ sender: Any) {
let newView = UIHostingController(rootView: SwiftUIView(viewObj: self.view, sb: self.storyboard, dismiss: self.dismiss) )
view.window?.rootViewController = newView
view.window?.makeKeyAndVisible()
}
我的问题是,我将如何从单个 SwiftUI 视图转换到 UIViewController?(因为应用程序的其余部分在 UIKit 中)?我在 SwiftUI 视图中有一个按钮,可以在点击时导航回 UIViewController。我试过了:
- 将
view和storyboard对象传递给SwiftUI 视图,然后调用执行与上述代码类似的操作来更改当前视图控制器。但是,在模拟器上尝试时没有任何反应。 - 使用
.present以模态方式显示 SwiftUI 视图。这行得通,我可以允许 SwiftUI 视图到.dismiss本身。但是,这仅在模态下有效,我希望使其正常工作(即更改屏幕)
这是我的简单 SwiftUI 视图:
struct SwiftUIView: View {
var viewObj:UIView? // Perhaps use this for transition back?
var sb:UIStoryboard?
var dismiss: (() -> Void)?
var body: some View {
Button(action: {
// Do something here to Transition
}) {
Text("This is a SwiftUI view.")
}
}
}
我无法理解如何正确地将 SwiftUI 集成到 UIKitNOT 反过来,我不确定 UIViewControllerRepresentable 是否是这个问题的答案。非常感谢对此的任何解决方案、替代方案或有用的知识。再次感谢!
【问题讨论】:
-
嗨,Chiah,我也遇到了类似的情况。你能找到解决办法吗?
-
嘿!不幸的是,我无法克服这个问题。由于我的应用程序相对较小,因此我只是在 SwiftUI 中重新编写了所有内容(老实说,这非常好!)。对不起!
标签: swift uiviewcontroller uikit swiftui swiftui-navigationlink