我正在努力在我现有的应用程序中实现一些SwiftUI内容。我目前有一个UIViewController,该UIViewController托管一个MTKView用于相机预览。
我已经创建了一个新的SwiftUI视图,该视图现在是我的{em> root 视图,如我的SceneDelegate.swift
文件中所设置。如预期的那样,SwiftUI视图将在启动时加载。现在,我想创建一个segue,当用户点击列表中的一行时,它将全屏显示到我现有的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
UIViewControllerRepresentable;
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是故事板中内置的UIViewController。
答案 0 :(得分:0)
我设法解决了这一问题,因为意识到我需要从情节提要而不是代码中实例化UIViewController(因为我已在情节提要中构建了它的布局以及一些编程元素)。要使用以上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>) {
//
}
}