ios - 从 SwiftUI View 转到 UIViewController

标签 ios swiftui

我正在努力将一些 SwiftUI 内容实现到我现有的应用程序中。我目前有一个 UIViewController,它承载了一个用于相机预览的 MTKView。

我创建了一个新的 SwiftUI View ,它现在是我的 Root View ,在我的 SceneDelegate.swift 中设置文件。 SwiftUI View 按预期在启动时加载。现在,我想创建一个转场,当用户点击列表中的一行时,它将全屏转场到我现有的 UIViewController。这就是我所说的;

var body: some View {
    VStack {
        NavigationView {
            List(sessionTypes) { session in
                NavigationLink(destination: CameraControllerWrapper()) {
                    SessionRow(session: session)
                    .frame(height: 40.0)
                }
            }
        .navigationBarTitle(Text("Camera Types"))
        }
    }
}

为了后代,这是我的CameraControllerWrapper UIViewController 可表示;
struct CameraControllerWrapper: UIViewControllerRepresentable {
typealias UIViewControllerType = CameraController

   func makeUIViewController(context: UIViewControllerRepresentableContext<CameraControllerWrapper>) -> CameraControllerWrapper.UIViewControllerType {
    return CameraController()
   }

   func updateUIViewController(_ uiViewController: CameraControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<CameraControllerWrapper>) {
    //
   }
}

虽然这“有效”,但只要调用 CameraController,我的应用程序就会崩溃,因为似乎找不到我的任何 IBOutlets。 CameraController 是内置在 Storyboard中的 UIViewController。

最佳答案

我通过意识到我需要从 Storyboard 而不是在代码中实例化 UIViewController 来解决这个问题(因为我已经在 Storyboard 中构建了它的布局,以及一些程序元素)。使用上述NavigationLink ,我需要调整我的UIViewControllerRepresentable像这样;

struct CameraControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = CameraController

    func makeUIViewController(context: UIViewControllerRepresentableContext<CameraControllerWrapper>) -> CameraControllerWrapper.UIViewControllerType {

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let mainViewController: CameraController = mainStoryboard.instantiateViewController(withIdentifier: "CameraController") as! CameraController
      return mainViewController

    }

    func updateUIViewController(_ uiViewController: CameraControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<CameraControllerWrapper>) {
        //
    }
}

关于ios - 从 SwiftUI View 转到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965840/

相关文章:

c# - MonoTouch 中的按钮问题

ios - 移动应用好友邀请/通知

ios - Swift 在 For 循环中追加数组

ios - UICollectionView 适用于 iOS7 但不适用于 iOS6

列表中的 SwiftUI NavigationLink

ios - UIViewanimationWithDuration递归导致抖动

swiftui - UIApplication.didBecomeActiveNotification 未调用 iOS 14

swift - 如何从 SwiftUI 中的函数返回按钮?

ios - 如何检测 TextField 何时在 SwiftUI 中变为事件状态?

SwiftUI:如何使图像与列表中的屏幕边缘齐平?