【问题标题】:SwiftUI: pass view information to UIKitSwiftUI:将视图信息传递给 UIKit
【发布时间】:2021-06-21 17:38:10
【问题描述】:

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

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

【问题讨论】:

标签: swift swiftui uikit uialertcontroller uihostingcontroller


【解决方案1】:

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

.coordinateSpace(name: "CalloutParentView") 

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

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

我通过委托将它传递给宿主 UIViewController,它可以使用 SwiftUI 视图作为sourceView,这个矩形作为sourceRect

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多