[英]SwiftUI - Show custom ViewController from View
我的View
中有一个Button
,它调用自定义视图 Controller ( UIViewControllerRepresentable
),因为我使用的外部库需要一个视图 controller 作为参数来显示它自己的弹出窗口(当然我不能更改)。
出于这个原因,我创建了这个中间件视图 controller 但是使用这个逻辑,行为不是我想要的......
将打开两个弹出窗口,一个在另一个之上。
这是因为这个库不是在 SwiftUI 中创建的,而是在经典的 UIKit 中创建的。
我做了什么:
内容视图
struct ContentView: View {
@State var showViewController = false
var body: some View {
VStack(alignment: .leading, content: {
Button("SHOW VIEW CONTROLLER") {
showViewController.toggle()
}
})
.sheet(isPresented: $showViewController, content: {
EmptyViewController()
})
}
}
空控制器:
struct EmptyViewController: UIViewControllerRepresentable {
func makeUIViewController(context: UIViewControllerRepresentableContext<EmptyViewController>) -> UIViewController {
let vc = UIViewController()
vc.view.backgroundColor = .systemRed
let extLibVC = ExternalLibraryClass()
extLibVC.doSomethingAndShowVC(from: vc) // issue here, because I need to pass VC
return vc
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<EmptyViewController>) {}
}
这是这种情况下的结果:
有一种方法可以直接使用
let extLibVC = ExternalLibraryClass()
extLibVC.doSomethingAndShowVC(from: vc)
在View
中而不从另一个视图传递 controller 并避免多个弹出窗口?
基本上我不想看到红色视图 controller,而是直接看到绿色视图。
只需使用NavigationLink ,这会使用 NavigationView 将新页面推送到堆栈中
struct test: View {
var body: some View {
NavigationView{
NavigationLink(
destination: EmptyViewController()
.navigationBarTitle(Text("Title"), displayMode: .inline),
label: {
Text("SHOW VIEW CONTROLLER")
})
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.