Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic example for sharing text or image with UIActivityViewController in Swift

I started my search by wanting to know how I could share to other apps in iOS. I discovered that two important ways are

  • UIActivityViewController
  • UIDocumentInteractionController

These and other methods are compared in this SO answer.

Often when I am learning a new concept I like to see a basic example to get me started. Once I get something basic set up I can modify it how I like later.

There are many SO questions related to UIActivityViewController, but I couldn't find any that were just asking for a simple example. Since I just learned how to do this, I will provide my own answer below. Feel free to add a better one (or an Objective-C version).

like image 513
Suragch Avatar asked Mar 11 '16 03:03

Suragch


People also ask

What is UIActivityViewController in Swift?

A view controller that you use to offer standard services from your app.

How do I know when UIActivityViewController is dismissed?

If the UIActivityViewController is dismissed without any action, the value for activityType will be nil and the value of completed will be false . In the OP's scenario, the view controller won't be dismissed if they cancel the share activity.


1 Answers

UIActivityViewController Example Project

Set up your storyboard with two buttons and hook them up to your view controller (see code below).

enter image description here

Add an image to your Assets.xcassets. I called mine "lion".

enter image description here

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 = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.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 = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]                  // present the view controller         self.present(activityViewController, animated: true, completion: nil)     }      } 

Result

Clicking "Share some text" gives result on the left and clicking "Share an image" gives the result on the right.

enter image description here

Notes

  • I retested this with iOS 11 and Swift 4. I had to run it a couple times in the simulator before it worked because it was timing out. This may be because my computer is slow.
  • If you wish to hide some of these choices, you can do that with excludedActivityTypes as shown in the code above.
  • Not including the popoverPresentationController?.sourceView line will cause your app to crash when run on an iPad.
  • This does not allow you to share text or images to other apps. You probably want UIDocumentInteractionController for that.

See also

  • Add sharing to your Swift app via UIActivityViewController
  • UIActivity​View​Controller from NSHipster
  • UIActivityViewController documentation
  • Share extension documentation
  • comparison with UIDocumentInteractionController
like image 78
Suragch Avatar answered Oct 14 '22 20:10

Suragch