swift - 如何从 SwiftUI 调用 UIViewController
问题描述
我有一个 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.
. Apple 在此处提供了有关如何使用它的文档:
https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable
此外,在他们的 SwiftUI 课程中有一个工作示例,最值得注意的是标题为“与 UIKit 交互”的课程,可在此处找到:
https://developer.apple.com/tutorials/swiftui/interfacing-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) 为继承自的 ViewController 创建一个具有唯一名称的结构UIViewControllerRepresentable
makeUIViewController(context: Context)
2)以 UIViewController 的返回类型实现函数
3) 实现updateUIViewController(_ uiViewController: YourUIViewController, context: Context)
没有返回的函数
4)根据需要,实现一个Coordinator
继承自NSObject
您需要的任何委托协议的类。
取决于您需要 ViewController 做什么,还有更多内容,但这应该会让您指向正确的方向。
推荐阅读
- visual-studio-code - 使用 Visual Studio Code 'Makefile' 扩展时如何启用漂亮打印
- html - HTML CSS 不起作用
- azure-active-directory - Azure B2C 自定义策略外部数据源身份验证
- c - 如何检查输入是否是C中的整数?
- c++ - 如何在虚幻引擎 5 中将 Rotation 转换为 FVector?
- r - 带有管道的 if 语句
- r - 第n组标签(仅计算新组的毕业生)
- laravel-livewire - 在编辑模式下打开页面时如何填充状态/区域/子区域选择?
- palantir-foundry - 如何在保留已删除行的同时合并增量数据集和快照数据集?
- concurrency - 在一个简单的并发程序中证明不变量(大学示例问题)