Skip to content

Instantly share code, notes, and snippets.

@priore
Created May 11, 2018 09:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save priore/8e9e9d4ff922f9532cfcb5c11cfb8e32 to your computer and use it in GitHub Desktop.
Save priore/8e9e9d4ff922f9532cfcb5c11cfb8e32 to your computer and use it in GitHub Desktop.
Custom action for a specific share types
//
// custom action for a specific share types
//
class MyCustomShare: NSObject, UIActivityItemSource {
static func share() {
let vc = UIViewController.topViewController()
let activityViewController = UIActivityViewController(activityItems: [self], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = vc?.view
vc?.present(activityViewController, animated: true, completion: nil)
}
// MARK: - UIActivityItemSource Protocol
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
var message: String = "you custom message"
if activityType == UIActivityType.postToFacebook {
activityViewController.dismiss(animated: false) {
// TODO: your custom actions
}
return nil
}
return message
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String {
return "your subject" // form email
}
func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivityType?, suggestedSize size: CGSize) -> UIImage? {
var image: UIImage?
if let imageUlr = "your image url", let url = URL(string: imageUlr) {
guard let data = try? Data(contentsOf: url) else {
return nil
}
image = UIImage(data: data)
}
return image
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return ""
}
}
extension UIViewController {
static var root: UIViewController? {
get {
return UIApplication.shared.delegate?.window??.rootViewController
}
}
static func topViewController(from viewController: UIViewController? = UIViewController.root) -> UIViewController? {
if let tabBarViewController = viewController as? UITabBarController {
return topViewController(from: tabBarViewController.selectedViewController)
} else if let navigationController = viewController as? UINavigationController {
return topViewController(from: navigationController.visibleViewController)
} else if let presentedViewController = viewController?.presentedViewController {
return topViewController(from: presentedViewController)
} else {
return viewController
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment