swift - SwiftUI:将视图信息传递给 UIKit
问题描述
我有一个 UIKit 和 AppKit 应用程序,我正在通过 UIHostingController / NSHostingController 在其中显示一个 SwiftUI 视图。视图上有一些按钮,我想将点击事件传回 UIKit/AppKit 视图控制器,以从被点击的按钮显示 UIAlertController(我更喜欢在 SwiftUI 中使用 ActionSheet,但它不支持苹果系统)。我通过宿主控制器将委托传递到 SwiftUI 视图中,并使用它来回调 UIKit/AppKit 视图。但是要显示 UIAlertController(甚至UIActivityViewController
),我需要从 SwiftUI 视图中获取有关sourceView
和的一些信息sourceRect
,否则它可能会在 iPad 上崩溃。
如何将这些信息从 SwiftUI 视图传递回 UIKit/Appkit 应用程序?我想这sourceView
可能是显示的 SwiftUI 视图,但是我如何读取(并传回)被点击的 SwiftUI 按钮的矩形?
解决方案
我找到了一种方法来做到这一点。由于该按钮是顶层 SwiftUI 下方的几层子视图,因此我为该父视图指定了一个“名称”,方法是:
.coordinateSpace(name: "CalloutParentView")
然后我将按钮包裹在 aGeometryReader
中,在按钮处理程序中,我通过使用以下方法获得了“rect”:
geometry.frame(in: .named("ParentView")
我通过委托将它传递给托管 UIViewController,它可以使用 SwiftUI 视图sourceView
作为sourceRect
推荐阅读
- sorting - SAS 9.3 和 SAS 9.4 左连接排序顺序
- kubernetes - 无法通过 istio 使用浏览器从外部获取产品页面
- android - 在后台捕获屏幕截图
- oauth-2.0 - 对多个客户端的 Oauth2 权限
- java - Java:在已编译的 .jar 中读取图像/文件并抛出 NullPointerException
- python - 使用 chromedriver 和 selenium 时出现错误
- json - 如何在没有地图和for循环的情况下在反应中渲染每个属性值?
- bash - 如何使用 unix 命令仅计算和显示多次重复的单词?
- java - 如何为库中的 jar 配置 Intellij 代码覆盖率
- arrays - 使用循环查找数组的最大值和最小值