|
// |
|
// 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 |
|
} |
|
} |
|
|
|
|
|
} |