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")!])
}
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?
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.