如何从 NavigationController 中的 SwiftUI 视图推送到 UIViewController
How to push to UIViewController from SwiftUI View that is in NavigationController
我有一个 SwiftUI View
从 UINavigationController
中的场景委托实例化
我想从 SwiftUI View
推送到另一个 UIViewController
我的场景委托展示了我的 View
是如何实例化的:
let vc = UIHostingController(rootView:SwiftUIView())
let navigationControll = UINavigationController(rootViewController: vc)
self.window?.rootViewController = navigationControll
// Present window to screen
self.window?.makeKeyAndVisible()
我怎样才能做到这一点?
您必须将 UIViewController
包装在 SwiftUI View
中,然后导航到那个。
例如
struct MyMasterViewController: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> MasterViewController {
var sb = UIStoryboard(name: "Main", bundle: nil)
var vc = sb.instantiateViewController(identifier: "MasterViewController") as! MasterViewController
return vc
}
func updateUIViewController(_ uiViewController: MasterViewController, context: Context) {
}
typealias UIViewControllerType = MasterViewController
}
并在 NavigationLink
中像这样从 SwiftUI View
中简单地调用它
struct SwiftUIView: View {
var body: some View {
NavigationLink(destination: MyMasterViewController()) {
Text("Show Detail View")
}.navigationBarTitle("Navigation")
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}.
}
阅读有关在 SwiftUI 中包装 ViewController 的更多信息here
我有一个 SwiftUI View
从 UINavigationController
中的场景委托实例化
我想从 SwiftUI View
UIViewController
我的场景委托展示了我的 View
是如何实例化的:
let vc = UIHostingController(rootView:SwiftUIView())
let navigationControll = UINavigationController(rootViewController: vc)
self.window?.rootViewController = navigationControll
// Present window to screen
self.window?.makeKeyAndVisible()
我怎样才能做到这一点?
您必须将 UIViewController
包装在 SwiftUI View
中,然后导航到那个。
例如
struct MyMasterViewController: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> MasterViewController {
var sb = UIStoryboard(name: "Main", bundle: nil)
var vc = sb.instantiateViewController(identifier: "MasterViewController") as! MasterViewController
return vc
}
func updateUIViewController(_ uiViewController: MasterViewController, context: Context) {
}
typealias UIViewControllerType = MasterViewController
}
并在 NavigationLink
中像这样从 SwiftUI View
struct SwiftUIView: View {
var body: some View {
NavigationLink(destination: MyMasterViewController()) {
Text("Show Detail View")
}.navigationBarTitle("Navigation")
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}.
}
阅读有关在 SwiftUI 中包装 ViewController 的更多信息here