xcodeswiftuishareuiactivityviewcontroller

Showing 'UIActivityViewController' in SwiftUI


I want to let the user to be able to share a location but I don't know how to show UIActivityViewController in SwiftUI.


Solution

  • The basic implementation of UIActivityViewController in SwiftUI is

    import UIKit
    import SwiftUI
    
    struct ActivityViewController: UIViewControllerRepresentable {
    
        var activityItems: [Any]
        var applicationActivities: [UIActivity]? = nil
    
        func makeUIViewController(context: UIViewControllerRepresentableContext<ActivityViewController>) -> UIActivityViewController {
            let controller = UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities)
            return controller
        }
    
        func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ActivityViewController>) {}
    
    }
    

    And here is how to use it.

    struct MyView: View {
    
        @State private var isSharePresented: Bool = false
    
        var body: some View {
            Button("Share app") {
                self.isSharePresented = true
            }
            .sheet(isPresented: $isSharePresented, onDismiss: {
                print("Dismiss")
            }, content: {
                ActivityViewController(activityItems: [URL(string: "https://www.apple.com")!])
            })
        }
    }