2

我有一个 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 按钮的矩形?

4

1 回答 1

0

我找到了一种方法来做到这一点。由于该按钮是顶层 SwiftUI 下方的几层子视图,因此我为该父视图指定了一个“名称”,方法是:

.coordinateSpace(name: "CalloutParentView") 

然后我将按钮包裹在 aGeometryReader中,在按钮处理程序中,我通过使用以下方法获得了“rect”:

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

我通过委托将它传递给托管 UIViewController,它可以使用 SwiftUI 视图sourceView作为sourceRect

于 2021-03-25T15:54:16.027 回答