如何在 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】:

UIViewUIViewController 可以通过各自的类UIViewRepresentableUIViewControllerRepresentable 在 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 中填充内容

如何在 UIkit 中添加 SwiftUI 对象

如何在 SwiftUI 中使用 SFSafariViewController?

如何在 swiftUI 视图中使用按钮? [关闭]

如何在 SwiftUI 中使用 .fileimporter 保存音频文件并检索文件并在 SwiftUI 列表中显示它们的文件名?

如何在 Xcode Playground 中使用 SwiftUI?