【发布时间】:2021-11-12 01:41:53
【问题描述】:
我正在使用 SwiftUI 应用协议构建一个 SwiftUI 应用。
我需要访问一些 UIKIt 函数,尤其是控制 NavigationView 的函数,如下所示:https://stackoverflow.com/a/56555928/13727105。
显然,为此我需要将我的 SwiftUI 视图与 ViewController 绑定。
我尝试过以下操作:
ContentView.swift
struct ContentView: View {
var body: some View {
ZStack {
ContentViewIntegratedController() // <- here
NavigationView{
ScrollView {
Text("Content View")
.navigationTitle("Content View")
}
}
}
}
}
class ContentViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
struct ContentViewIntegratedController: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> some UIViewController {
return ContentViewController()
}
func updateUIViewController(_ uiViewController: UIViewControllerType,
context: UIViewControllerRepresentableContext<ContentViewIntegratedController>) {}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
但调用ContentViewIntegratedContoller(在第 5 行)似乎会创建一个新的预览而不是修改现有的。
有没有集成 ViewController 来修改 SwiftUI 视图?
我不想做的事:
- 创建一个包含 SwiftUI 视图的 Storyboards 应用
- 为
ContentViewIntegratedViewController创建一个故事板视图。
是否有任何替代方法可以访问这些功能而无需将 ViewController 添加到我的 SwiftUI 视图?
TIA。
【问题讨论】:
-
@Andrew 我做到了。
ContentViewIntegratedViewController扩展了UIViewControllerRepresentable。但它似乎仍然不起作用。 -
如果您想要基于 Storyboards 的应用程序,您应该使用基于 UIKit 的模板创建项目,然后使用
UIHostingController将 SwiftUI 视图集成到其中 -
查看链接的问题,您想要做的比简单地使用带有 SwiftUI 的 UIKit 视图更棘手。您想要访问支持
NavigationView的导航控制器的属性。我认为这是不可能的。
标签: ios swift swiftui uiviewcontroller uikit