如何从SwiftUI调用UIViewController

如何从SwiftUI调用UIViewController,swift,uikit,swiftui,Swift,Uikit,Swiftui,我有一个SwiftUI选项卡,第二个选项卡项需要显示UIViewController。如何在第二个选项卡中嵌入UIViewController class MyUIVC: UIViewController {.....} 下面是一些我想要的伪代码: struct myTabView: View { @State var selectedTab: Int = 0 var body: some View { mySwiftUIView .tabItem { Text("Firs

我有一个SwiftUI选项卡,第二个选项卡项需要显示UIViewController。如何在第二个选项卡中嵌入UIViewController

class MyUIVC: UIViewController {.....}
下面是一些我想要的伪代码:

struct myTabView: View {
@State var selectedTab: Int = 0
var body: some View {
    mySwiftUIView
      .tabItem { Text("First Tab") }
      .tag(0)

    MyUIVC //This is what I want to do with my UIViewController
      .tabItem { Text("Second Tab") }
      .tag(1)
 }
 }

您需要使用
UIViewControllerRepresentable来桥接ViewController。
。Apple在此处提供了有关如何使用该功能的文档:

此外,在他们的SwiftUI课程中有一个关于它的工作示例,最显著的是题为“与UIKit接口”的课程,可在此处找到:

他们正在使用的示例ViewController如下所示:


struct PageViewController: UIViewControllerRepresentable {
    var controllers: [UIViewController]

    func makeUIViewController(context: Context) -> UIPageViewController {
        let pageViewController = UIPageViewController(
            transitionStyle: .scroll,
            navigationOrientation: .horizontal)

        return pageViewController
    }

    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
        pageViewController.setViewControllers(
            [controllers[0]], direction: .forward, animated: true)
    }

    class Coordinator: NSObject {
        var parent: PageViewController

        init(_ pageViewController: PageViewController) {
            self.parent = pageViewController
        }
    }
}
话虽如此,连接ViewController的核心和灵魂是:

1) 为继承自UIViewControllerRepresentable的ViewController创建具有唯一名称的结构

2) 使用UIViewController的返回类型实现函数
makeUIViewController(context:context)

3) 实现函数
updateUIViewController(\uiViewController:YourUIViewController,context:context)
而不返回

4) 根据需要,实现从
NSObject
继承的
Coordinator
类以及所需的任何委托协议

还有一点取决于您需要ViewController做什么,但这应该让您指向正确的方向