Je me demande s'il y a un bon sens exportation ou partagez un fichier via SWIFTUI. Il ne semble pas y avoir un moyen d'envelopper une uaractivitéController et de le présenter directement. J'ai utilisé l'UIVIEWCONTROLLERREPRESENTABLE POUR ENVOYER UN UIACTICTICITYVIEWCONTROLLER, ET CLASTING SI JE, DITES, Présentez-le dans un SWIFTUI MODAL.
J'ai pu créer un UIViewController générique, puis à partir de là, appelez une méthode qui présente l'uactivitéViewController, mais c'est beaucoup d'emballage.
Et si nous voulons partager du Mac à l'aide de SWIFTUI, est-il un moyen d'envelopper NssharingServicePicker?
Quoi qu'il en soit, si quelqu'un a un exemple de la façon dont ils le font, ce serait très apprécié.
Jetez un coup d'œil à AlanquaterMain -s SwifthacheHeetDemo
En un mot, il ressemble à ceci:
@State private var showShareSheet = false
@State public var sharedItems : [Any] = []
Button(action: {
self.sharedItems = [UIImage(systemName: "house")!]
self.showShareSheet = true
}) {
Text("Share")
}.sheet(isPresented: $showShareSheet) {
ShareSheet(activityItems: self.sharedItems)
}
struct ShareSheet: UIViewControllerRepresentable {
typealias Callback = (_ activityType: UIActivity.ActivityType?, _ completed: Bool, _ returnedItems: [Any]?, _ error: Error?) -> Void
let activityItems: [Any]
let applicationActivities: [UIActivity]? = nil
let excludedActivityTypes: [UIActivity.ActivityType]? = nil
let callback: Callback? = nil
func makeUIViewController(context: Context) -> UIActivityViewController {
let controller = UIActivityViewController(
activityItems: activityItems,
applicationActivities: applicationActivities)
controller.excludedActivityTypes = excludedActivityTypes
controller.completionWithItemsHandler = callback
return controller
}
func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {
// nothing to do here
}
}
La plupart des solutions oublient ici de remplir la feuille d'actions sur l'iPad.
Donc, si vous avez l'intention d'avoir une application qui ne plait pas sur cet appareil, vous pouvez utiliser cette méthode sur laquelle popoverController
est utilisé et ajoutez votre choix activityItems
comme paramètre.
import SwiftUI
/// Share button to populate on any SwiftUI view.
///
struct ShareButton: View {
/// Your items you want to share to the world.
///
let itemsToShare = ["https://iTunes.Apple.com/app/id1234"]
var body: some View {
Button(action: { showShareSheet(with: itemsToShare) }) {
Image(systemName: "square.and.arrow.up")
.font(.title2)
.foregroundColor(.blue)
}
}
}
extension View {
/// Show the classic Apple share sheet on iPhone and iPad.
///
func showShareSheet(with activityItems: [Any]) {
guard let source = UIApplication.shared.windows.last?.rootViewController else {
return
}
let activityVC = UIActivityViewController(
activityItems: activityItems,
applicationActivities: nil)
if let popoverController = activityVC.popoverPresentationController {
popoverController.sourceView = source.view
popoverController.sourceRect = CGRect(x: source.view.bounds.midX,
y: source.view.bounds.midY,
width: .zero, height: .zero)
popoverController.permittedArrowDirections = []
}
source.present(activityVC, animated: true)
}
}