How to implement "share button" in Swift
Swift 5:
// Setting description let firstActivityItem = "Description you want.." // Setting url let secondActivityItem : NSURL = NSURL(string: "http://your-url.com/")! // If you want to use an image let image : UIImage = UIImage(named: "your-image-name")! let activityViewController : UIActivityViewController = UIActivityViewController( activityItems: [firstActivityItem, secondActivityItem, image], applicationActivities: nil) // This lines is for the popover you need to show in iPad activityViewController.popoverPresentationController?.sourceView = (sender as! UIButton) // This line remove the arrow of the popover to show in iPad activityViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.down activityViewController.popoverPresentationController?.sourceRect = CGRect(x: 150, y: 150, width: 0, height: 0) // Pre-configuring activity items activityViewController.activityItemsConfiguration = [ UIActivity.ActivityType.message ] as? UIActivityItemsConfigurationReading // Anything you want to exclude activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.postToWeibo, UIActivity.ActivityType.print, UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.saveToCameraRoll, UIActivity.ActivityType.addToReadingList, UIActivity.ActivityType.postToFlickr, UIActivity.ActivityType.postToVimeo, UIActivity.ActivityType.postToTencentWeibo, UIActivity.ActivityType.postToFacebook ] activityViewController.isModalInPresentation = true self.present(activityViewController, animated: true, completion: nil)
This is how I implemented sharing with Swift 4/5 using a right button on the Navigation Controller. It includes an image, text and link.
SWIFT 4/5
On ViewDidLoad
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Share", style: .plain, target: self, action: #selector(share(sender:)))
Create the function
@objc func share(sender:UIView){ UIGraphicsBeginImageContext(view.frame.size) view.layer.render(in: UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() let textToShare = "Check out my app" if let myWebsite = URL(string: "http://itunes.apple.com/app/idXXXXXXXXX") {//Enter link to your app here let objectsToShare = [textToShare, myWebsite, image ?? #imageLiteral(resourceName: "app-logo")] as [Any] let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) //Excluded Activities activityVC.excludedActivityTypes = [UIActivity.ActivityType.airDrop, UIActivity.ActivityType.addToReadingList] // activityVC.popoverPresentationController?.sourceView = sender self.present(activityVC, animated: true, completion: nil) } }
@IBAction func shareButtonClicked(sender: AnyObject) { //Set the default sharing message. let message = "Message goes here." //Set the link to share. if let link = NSURL(string: "http://yoururl.com") { let objectsToShare = [message,link] let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList] self.presentViewController(activityVC, animated: true, completion: nil) } }
This will allow you to present a UIActivityViewController to share a link and a message with any application that will accept them.