如何在 SwiftUI 中使用 UIViewController 和 UIView?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中使用 UIViewController 和 UIView?【英文标题】:How can I use UIViewController and UIView in SwiftUI? 【发布时间】:2019-06-18 17:50:52 【问题描述】:我尝试在 Swift 应用程序中集成自定义 UIViewController,但无法将其与 Text() 等 SwiftUI 元素集成。我收到此错误:函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型。我应该使用 UIView 而不是 UIViewController 吗?
【问题讨论】:
您应该已经签出的会话称为会话 231:集成 SwiftUI。请证明您确实尝试过学习(或至少在此处和/或在线搜索)这个! developer.apple.com/videos/play/wwdc2019/231 抱歉听起来很刻薄 - 我的评论仍然存在。但我理解,它是一种范式改变。因此,为了更具建设性 - 观看我给你的链接,注意一切但最重要的是一件事 - 即使SwiftUI
中的UIViewController
实际上只是View
.或者更确切地说,它的 根视图是。我已经成功地使用了 MTKView
,包装在视图控制器中,作为 Swift UI 视图 - 使用委托并访问其中的函数。但请理解,范式变化意味着您需要与 SwiftUI 一起学习 Combine。大约有 6 场 WWDC 会议。
好的,谢谢!我刚看过。帮了我一把。
【参考方案1】:
UIView
和 UIViewController
可以通过各自的类UIViewRepresentable
和 UIViewControllerRepresentable
在 SwiftUI 中实现。
Apple 的 SwiftUI 教程介绍了这一点,以及将 UIKit 集成到 SwiftUI 中的其他方法。
SwiftUI 教程: https://developer.apple.com/tutorials/swiftui/tutorials
使用 UIViewRepresentable 将 UIView 放入 SwiftUI: https://developer.apple.com/tutorials/swiftui/creating-and-combining-views ^ 见第 5 节,它使用 MKMapView 作为 UIView
与 UIKit 的接口: https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit
对不起,我的答案中缺少代码,我现在 AFK。然而,最好的学习方法是自己去追踪和解决问题。希望这会有所帮助!
更新
如果您想将 SwiftUI 集成到现有的 UIKit 应用程序中,请考虑使用 UIHostingController。它的工作原理是:
UIHostingController(rootView: MySwiftUIStruct())
https://developer.apple.com/documentation/swiftui/uihostingcontroller
它允许您在 UIKit 应用程序中放置 SwiftUI 内容,就像在其中放置 UIView 或 UIViewController 一样。
【讨论】:
以上是关于如何在 SwiftUI 中使用 UIViewController 和 UIView?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI 在 UICollectionViewCell 中填充内容
如何在 SwiftUI 中使用 SFSafariViewController?
如何在 SwiftUI 中使用 .fileimporter 保存音频文件并检索文件并在 SwiftUI 列表中显示它们的文件名?