Fay*_*ouz 5 uikit swift swiftui
我有一个 SwiftUI TabView,第二个选项卡项需要显示 UIViewController。如何将 UIViewController 嵌入到第二个选项卡中?
class MyUIVC: UIViewController {.....}
Run Code Online (Sandbox Code Playgroud)
以下是我想要的一些伪代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
您需要使用桥接 ViewController UIViewControllerRepresentable.。Apple 在此处提供了有关如何使用它的文档:
https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable
此外,他们的 SwiftUI 课程中有一个有效的示例,最引人注目的是标题为“Interface with 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,桥接 ViewController 的核心和灵魂是:
1)为ViewController创建一个具有唯一名称的结构体,该结构体继承自UIViewControllerRepresentable
makeUIViewController(context: Context)2)使用UIViewController的返回类型实现该函数
updateUIViewController(_ uiViewController: YourUIViewController, context: Context)3)实现不带返回的函数
4) 根据需要,实现一个Coordinator继承自NSObject您需要的任何委托协议的类。
还有更多的内容取决于您需要 ViewController 做什么,但这应该会让您指向正确的方向。
| 归档时间: |
|
| 查看次数: |
6367 次 |
| 最近记录: |