2

I have a UIKit and AppKit app, and I am displaying a SwiftUI view within it via UIHostingController / NSHostingController. The view has some buttons on it, and I want to pass back the tap event back to a UIKit/AppKit view controller to show UIAlertController from the button that got tapped (I would prefer to use ActionSheet within SwiftUI but it isn't supported on macOS). I pass a delegate through the hosting controller into the SwiftUI view, and use that to call back into the UIKit/AppKit view. But to display a UIAlertController (or even UIActivityViewController), I would need to get some information about the sourceView and sourceRect from the SwiftUI view, else it might crash on iPad.

How do I pass back that information, from the SwiftUI view into the UIKit/Appkit app? I guess the sourceView could be the SwiftUI view on display, but how do I read (and pass back) the rect of the SwiftUI button that was tapped?

1

1 Answer 1

0

I found a way to do this. Since the button is a few layers of subviews down from the top-level SwiftUI, I gave that parent view a 'name', by using:

.coordinateSpace(name: "CalloutParentView") 

Then I wrapped the button in a GeometryReader, and in the button handler, I got the 'rect' by using:

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

I passed that through the delegate to the hosting UIViewController, and that can use the SwiftUI view as the sourceView and this rect as the sourceRect

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.