Ios 从SwiftUI视图切换到UIViewController
我正在努力在我现有的应用程序中实现一些SwiftUI内容。我目前有一个UIViewController,它承载用于相机预览的MTKView 我已经创建了一个新的SwiftUI视图,它现在是我的根视图,在我的Ios 从SwiftUI视图切换到UIViewController,ios,swiftui,Ios,Swiftui,我正在努力在我现有的应用程序中实现一些SwiftUI内容。我目前有一个UIViewController,它承载用于相机预览的MTKView 我已经创建了一个新的SwiftUI视图,它现在是我的根视图,在我的SceneDelegate.swift文件中设置。正如预期的那样,SwiftUI视图在启动时加载。现在,我想创建一个segue,当用户点击我列表中的一行时,它将全屏切换到我现有的UIViewController。我是这样称呼的 var body: some View { VStack
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"))
}
}
}
为了子孙后代,这是我的cameracontrollerrapper
UIViewControllerRepresentable
struct CameraControllerWrapper: UIViewControllerRepresentable {
typealias UIViewControllerType = CameraController
func makeUIViewController(context: UIViewControllerRepresentableContext<CameraControllerWrapper>) -> CameraControllerWrapper.UIViewControllerType {
return CameraController()
}
func updateUIViewController(_ uiViewController: CameraControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<CameraControllerWrapper>) {
//
}
}
struct-cameracontrollerrapper:UIViewControllerRepresentable{
typealias UIViewControllerType=CameraController
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->CameraController Rapper.UIViewControllerType{
返回CameraController()
}
func updateUIViewController(uViewController:CameraControllerRapper.UIViewControllerType,上下文:UIViewControllerRepresentableContext){
//
}
}
虽然这“起作用”,但只要调用CameraController,我的应用程序就会崩溃,因为似乎找不到我的任何IBMOutlet。CameraController是脚本中内置的UIViewController。我意识到我需要从脚本而不是代码中实例化UIViewController,从而解决了这个问题(因为我在脚本中构建了它的布局,以及一些编程元素)。要使用上面的
导航链接
,我需要调整我的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>) {
//
}
}
struct-cameracontrollerrapper:UIViewControllerRepresentable{
typealias UIViewControllerType=CameraController
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->CameraController Rapper.UIViewControllerType{
let mainStoryboard:UIStoryboard=UIStoryboard(名称:“Main”,bundle:nil)
让mainViewController:CameraController=MainstryBoard。实例化ViewController(标识符为:“CameraController”)为!CameraController
返回主视图控制器
}
func updateUIViewController(uViewController:CameraControllerRapper.UIViewControllerType,上下文:UIViewControllerRepresentableContext){
//
}
}
为了清楚起见,你是说你有(1)一个情节提要
应用程序,你(2)使MainViewController
根视图成为一个SwiftUI
视图,以及(3)在这个根视图中放置一个NavigationView
,并且(4)导航到一个UIViewControllerRepresentable
,它有(5)IBOutlets
在其中定义了什么?如果这条链上有什么不对劲,请纠正我。我想那是对的。我有一个UIViewController,它是在故事板中构建和设计的,带有IBOutlets,以前是我的入口视图控制器。我现在添加了一个SwiftUI视图,它是我的根视图,并希望切换到以前的UIViewController,它现在是“第二个”视图控制器,不再是主视图。