web-dev-qa-db-fra.com

Présentation de l'uactivitéViewController de Swiftui View

J'essaie de présenter une UIActivityViewController (feuille d'actions) d'une vue SwiftUI. J'ai créé une vue appelée ShareSheet _ conforme à UIViewControllerRepresentable pour configurer le UIActivityViewController, mais il se révèle ne pas être aussi trivial pour le présenter réellement.

struct ShareSheet: UIViewControllerRepresentable {
    typealias UIViewControllerType = UIActivityViewController

    var sharing: [Any]

    func makeUIViewController(context: UIViewControllerRepresentableContext<ShareSheet>) -> UIActivityViewController {
        UIActivityViewController(activityItems: sharing, applicationActivities: nil)
    }

    func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ShareSheet>) {

    }
}

Faire si naïvement via .sheet conduit à ce qui suit.

.sheet(isPresented: $showShareSheet) {
    ShareSheet(sharing: [URL(string: "https://example.com")!])
}

screenshot of failed controller presentation

Y a-t-il un moyen de présenter cela comme il est généralement présenté? Comme dans la moitié de l'écran?

13
Kilian

Ce n'est pas joli mais vous pouvez l'appeler directement comme ceci (compte tenu de votre application, 1 fenêtre):

UIApplication.shared.windows.first?.rootViewController?.present(activityViewController, animated: true, completion: nil)

Et si vous obtenez un avertissement Blablabla:

AVERTISSEMENT: Tentative de présenter ... qui présente déjà ...

vous pouvez faire quelque chose comme ceci pour obtenir le contrôleur le plus optimal et appelez-le présent dessus.

0
JS1010111