SwiftUI:将视图信息传递给 UIKit

SwiftUI: pass view information to UIKit

我有一个 UIKit 和 AppKit 应用程序,我正在通过 UIHostingController / NSHostingController 在其中显示一个 SwiftUI 视图。视图上有一些按钮,我想将点击事件传回 UIKit/AppKit 视图控制器以从被点击的按钮显示 UIAlertController (我更喜欢在 SwiftUI 中使用 ActionSheet 但它不是在 macOS 上支持)。我通过托管控制器将委托传递到 SwiftUI 视图,并使用它回调到 UIKit/AppKit 视图。但是要显示 UIAlertController(甚至 UIActivityViewController),我需要从 SwiftUI 视图中获取有关 sourceViewsourceRect 的一些信息,否则它可能会在 iPad 上崩溃.

如何将该信息从 SwiftUI 视图传回 UIKit/Appkit 应用程序?我猜 sourceView 可能是显示的 SwiftUI 视图,但我如何读取(并传回)被点击的 SwiftUI 按钮的矩形?

我找到了一种方法来做到这一点。由于该按钮是从顶层 SwiftUI 向下几层子视图,因此我给该父视图一个 'name',方法是:

.coordinateSpace(name: "CalloutParentView") 

然后我将按钮包装在 GeometryReader 中,在按钮处理程序中,我使用以下方法获得了 'rect':

geometry.frame(in: .named("ParentView")

我通过委托将其传递给托管 UIViewController,它可以将 SwiftUI 视图用作 sourceView,并将此矩形用作 sourceRect