![](/img/trans.png)
[英]How to Navigating from SwiftUI View to UIKit UIViewController
[英]How to call a UIViewController from SwiftUI
我有一个 SwiftUI TabView,第二个选项卡项需要显示一个 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 UIViewControllerRepresentable.
. Apple 在此处提供了有关如何使用它的文档:
https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable
此外,在他们的 SwiftUI 课程中有一个关于它的工作示例,最著名的是标题为“与 UIKit 交互”的课程,可以在这里找到:
https://developer.apple.com/tutorials/swiftui/interface-with-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)实现函数makeUIViewController(context: Context)
,返回类型为UIViewController
3) 实现函数updateUIViewController(_ uiViewController: YourUIViewController, context: Context)
无返回
4) 根据需要,实现一个从NSObject
继承的Coordinator
类以及您需要的任何委托协议。
还有一点取决于您需要 ViewController 做什么,但这应该让您指向正确的方向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.