Exemple de projet UIActivityViewController
Configurez votre storyboard avec deux boutons et connectez-les à votre contrôleur de vue (voir le code ci-dessous).
Ajoutez une image à vos Assets.xcassets. J'ai appelé le mien "lion".
Code
import UIKit
class ViewController: UIViewController {
// share text
@IBAction func shareTextButton(_ sender: UIButton) {
// text to share
let text = "This is some text that I want to share."
// set up activity view controller
let textToShare = [ text ]
let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
// exclude some activity types from the list (optional)
activityViewController.excludedActivityTypes = [ UIActivityType.airDrop, UIActivityType.postToFacebook ]
// present the view controller
self.present(activityViewController, animated: true, completion: nil)
}
// share image
@IBAction func shareImageButton(_ sender: UIButton) {
// image to share
let image = UIImage(named: "Image")
// set up activity view controller
let imageToShare = [ image! ]
let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
// exclude some activity types from the list (optional)
activityViewController.excludedActivityTypes = [ UIActivityType.airDrop, UIActivityType.postToFacebook ]
// present the view controller
self.present(activityViewController, animated: true, completion: nil)
}
}
Résultat
Cliquer sur "Partager du texte" donne le résultat à gauche et cliquer sur "Partager une image" donne le résultat à droite.
Remarques
- J'ai retesté cela avec iOS 11 et Swift 4. J'ai dû l'exécuter plusieurs fois dans le simulateur avant que cela ne fonctionne car il expirait. Cela peut être dû au fait que mon ordinateur est lent.
- Si vous souhaitez masquer certains de ces choix, vous pouvez le faire avec
excludedActivityTypes
comme indiqué dans le code ci-dessus.
- Si vous n'incluez pas la
popoverPresentationController?.sourceView
ligne, votre application se bloquera lorsqu'elle sera exécutée sur un iPad.
- Cela ne vous permet pas de partager du texte ou des images avec d'autres applications. Vous voulez probablement
UIDocumentInteractionController
pour ça.
Voir également
Partager : Texte
Partager : Image
Partager: Texte - Image - URL
la source
J'ai trouvé que cela fonctionnait parfaitement si vous souhaitez partager tout l'écran.
la source
À titre indicatif, vous pouvez également l'utiliser pour les iPad:
Ainsi, le popover sort de l'expéditeur (le bouton dans ce cas).
la source
Vous pouvez utiliser les fonctions suivantes que j'ai écrites dans l'une de mes classes d'assistance dans un projet.
il suffit d'appeler
et cela fonctionnera à la fois pour iPhone et iPad. Si vous transmettez la valeur CGRect d'une vue par sourceRect, une petite flèche apparaîtra également sur l'iPad.
la source
if
instructions, vous pouvez écrire[url, image, msg].compactMap({ $0 })
.J'ai utilisé l'implémentation ci-dessus et je viens de savoir que cela ne fonctionne pas sur iPad sous iOS 13. J'ai dû ajouter ces lignes avant l'appel present () pour que cela fonctionne
C'est comme ça que ça marche pour moi
la source