Proyecto de ejemplo UIActivityViewController
Configure su guión gráfico con dos botones y conéctelos a su controlador de vista (vea el código a continuación).
Agregue una imagen a sus Assets.xcassets. Yo llamé al mío "león".
Código
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)
}
}
Resultado
Al hacer clic en "Compartir texto" se obtiene el resultado a la izquierda y al hacer clic en "Compartir una imagen" se obtiene el resultado a la derecha.
Notas
- Volví a probar esto con iOS 11 y Swift 4. Tuve que ejecutarlo un par de veces en el simulador antes de que funcionara porque se estaba agotando el tiempo de espera. Esto puede deberse a que mi computadora es lenta.
- Si desea ocultar algunas de estas opciones, puede hacerlo
excludedActivityTypes
como se muestra en el código anterior.
- Si no se incluye la
popoverPresentationController?.sourceView
línea, la aplicación se bloqueará cuando se ejecute en un iPad.
- Esto no le permite compartir texto o imágenes a otras aplicaciones. Probablemente quieras
UIDocumentInteractionController
para eso.
Ver también
Compartir: texto
Compartir: Imagen
Compartir: Texto - Imagen - URL
fuente
Encontré que esto funciona a la perfección si quieres compartir toda la pantalla.
fuente
Solo como nota, también puede usar esto para iPads:
Entonces el popover aparece del remitente (el botón en ese caso).
fuente
Puede usar las siguientes funciones que escribí en una de mis clases de ayuda en un proyecto.
solo llama
y funcionará tanto para iPhone como para iPad. Si pasa el valor CGRect de cualquier vista por sourceRect, también mostrará una pequeña flecha en el iPad.
fuente
Utilicé la implementación anterior y justo ahora me di cuenta de que no funciona en iPad con iOS 13. Tuve que agregar estas líneas antes de la llamada present () para que funcione
Así funciona para mí
fuente